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)与情况1和2相同的情况;但是,在没有#号的地方(请参阅上面有关尾部空白的说明)。例如
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
我同意'(?:。*)似乎毫无意义,我只是不知道该如何表达。我尝试了两种解决方案,但他们不适合我。它们包括'Hello World'组中'#Some more text'部分。我需要它不包括尾随空间,英镑符号和其后的所有内容。 – TehTechGuy 2012-08-14 16:58:52
这与(。+ \ S)的贪婪行为有关,尝试将它改为懒惰的替代方案,(。+?\ S),这也应该做窍门 – 2012-08-14 17:03:47
也不需要一个字符类只有一件事:S – 2012-08-14 17:04:20