如何在Regex中匹配名称,名称?

时间:2018-01-27 01:51:41

标签: regex whitespace regex-lookarounds

我已经尝试了一切我能想到的工作,经过几个小时的努力,我得寻求帮助。

这是我正在扫描的字符串。

(?i)English\\(?<Writer>.*(?= ))(?-i)

这是目前正在使用的Regex尝试匹配我想要的内容。

{{1}}

匹配英文\ Jack,Byrd - Art

我想让它匹配的是Jack,Byrd(之后没有空格。)

出于某种原因,我能够匹配的唯一空间是Art之后的空间。 无论我尝试什么,它只会匹配那个空间。它并不认为其他空间是空格。

1 个答案:

答案 0 :(得分:0)

(?i)English\\(?<Writer>.*(?= ))(?-i)模式包含.*,可以抓取尽可能多的字符,然后回溯导致English\Jack, Byrd - Art匹配,因为Art之后的空格是最后一个空格(由于前瞻性(?= )),空间是必需的。

根据您的具体情况,有多种方法可以解决这个问题。如果在必要的值之后总是有空格 - 连字符空格,则向前瞻添加空格和连字符

(?i)English\\(?<Writer>.*(?= - ))(?-i)

如果值始终是一个非空白字符串,逗号,空格和一串非空白字符,则使用

(?i)English\\(?<Writer>\S+,\s*\S+)(?-i)

其中\S+匹配一个或多个非空白字符。

对于那些想知道(?<Write>...)是什么的人,该构造被称为名为捕获组,并且在相同的正则表达式模式中使用时被引用为\k<Writer>在字符串替换参数中使用时${Writer}