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