【发布时间】:2019-04-04 03:10:00
【问题描述】:
用这样的字符串集合:
string s1 = " Identifier1 = Value1 ## Comment";
string s2 = " Something = SomeData";
string s3 = " Name = information\\t\\t\\t## More comments!";
string s4 = " Nam2 = information";
我需要一个正则表达式模式,该模式将抓取等号 (=) 之后直到行尾或 ## 注释标记的行上的所有信息,但不会捕获其中任何一个。
给我(分别):
" Value1 "
" SomeData"
" information\\t\\t\\t"
" information"
到目前为止,我已经想出了这个:(?<=[=]).+(?=(?>##|$))
它有点工作,因为它设法抓取 = 符号之后的所有文本直到字符串的末尾,但是当有注释标记时它永远不会工作:## 因为它仍然抓取到字符串的末尾,而不是停在##。
...如果我将模式更改为:(?<=[=]).+(?=##))
然后它仅在带有注释标记的行上工作(并根据需要在它们之前停止)。
那么我做错了什么/错过了让它在 ## 之前或 EOL 结束捕获?另外,我不能使用显式或隐式捕获组,因为这些模式被传递到解析器中,解析器在处理它们时会将它们转换为非捕获组。
直到最近几天,我才使用过前瞻/后视模式,这东西让我大吃一惊……
【问题讨论】: