正则表达式来匹配单词列表

问题描述 投票:0回答:1

我想从文件名列表中提取国家/地区。这些国家/地区可以出现多次,以逗号和空格分隔。

我的正则表达式(在 Powershell 7 中使用):

$regex = "^[^\(]* \(([\b(USA|Japan|Europe|Germany|Canada)\b,\s]*)\).*$"
if ($name -match $regex) {
    #...
}

(国家名单已缩短)

示例数据:

3-D Genesis (USA) (Proto)
Wallaby!! - Usagi no Kuni no Kangaroo Race (Japan) (Wii U Virtual Console)
UWOL - Quest for Money (World) (v1.1) (Aftermarket) (Unl)
Super Star Soldier (USA, Europe) (Wii U Virtual Console)
Soldier Blade (USA, Europe) (Wii U Virtual Console)
Mein Weg (USA, Germany) (En)
Challenge (Canada)

但是Powershell似乎忽略了单词边界?

Name                           Value
----                           -----
1                              USA) (Proto
0                              3-D Genesis (USA) (Proto)

更奇怪的是,考虑到上面的示例数据,Regexr 匹配第一个示例,但似乎不理解“mein weg”示例中的行尾,并匹配以下行

regex powershell
1个回答
1
投票

就像评论中提到的那样,应该给出一些指示

  • 方括号仅匹配文字字符:请改用常规括号

  • 你应该使用惰性匹配在第一个右括号处停止

  • 您缺少多行标志来匹配每一行而不是所有内容

    /^[^\(]* \(((?:\b(USA|Japan|Europe|Germany|Canada)\b|\s|,)*?)\).*$/gm

© www.soinside.com 2019 - 2024. All rights reserved.