用琴弦
Test=Hello World #Some more text
Test=Hello World
我需要同时捕获“测试”组和“Hello World”组。如果字符串以“#”开头,则根本不应该被捕获。
以下表达式分别适用于第一个和第二个字符串:
^((?!#).+)(?:=)(.+[\S])(?:[\s]*[#])
^((?!#).+)(?:=)(.+[\S])
如何在两个非捕获正则表达式组之间进行按位逻辑或?
我试着做类似的事情
^((?!#).+)(?:=)(.+[\S])(?:[\s]*[#])|(?:.*)
但不能让它正常工作。
更多细节
背景:这是在 C# (.NET Framework 4.0) 中完成的。正在逐行读取文件。等号左边的文本是指变量名,等号右边的文本是指变量的值。该文件被用作配置文件。
一般情况:
注意:所有尾随空格 - 不应捕获最后一个非空格字符末尾的任何空格。这还包括第二组末尾和井号之间的任何空格。
1) 除空格外的所有字符,紧随其后的是等号,紧随其后的是任何一组字符,后跟空格和井号。例如
this=is valid #text
s0_is=this #text
and=th.is #text
the=characters after the # Pound sign are irrelevant
2) 与案例 1 完全相同的情况,只是第二个捕获组和井号之间没有尾随空格。例如
this=is valid#text
s0_is=this#text
and=th.is#text
the=characters after the# Pound sign are irrelevant
3) 情况与情况一、二相同;但是,如果根本没有 # 符号(请参阅上面关于尾随空格的说明)。例如
this=is valid
s0_is=this
and=th.is
the=characters after the
对于所有这三种情况,捕获组应分别如下所示(| 符号用于区分捕获组):
this|is valid
s0_is|this
and|th.is
the|characters after the
特别案例:
1) 行的第一个字符是# 号。这应该不会导致任何内容被捕获。
2) # 符号紧跟在 = 符号之后。这应该导致第二个捕获组为空。
3) # 符号出现在上面没有明确说明的任何其他地方。这应该不会导致任何内容被捕获。
4) 新行的第一个字符之前不应有空格;但是,这种情况不太可能真正发生。
5) 等号后的空格无效。
无效的情况(不应捕获任何内容):
th is=is not valid#text
nor =this#text
or_this=something
also= this