我已经尝试了一切我能想到的工作,经过几个小时的努力,我得寻求帮助。
这是我正在扫描的字符串。
(?i)English\\(?<Writer>.*(?= ))(?-i)
这是目前正在使用的Regex尝试匹配我想要的内容。
{{1}}
匹配英文\ Jack,Byrd - Art
我想让它匹配的是Jack,Byrd(之后没有空格。)
出于某种原因,我能够匹配的唯一空间是Art之后的空间。 无论我尝试什么,它只会匹配那个空间。它并不认为其他空间是空格。
答案 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}
。