[英]Regex for multiline string pattern
我正在為多行字符串模式創建正則表達式,但是它不起作用。 這是我的輸入模式。
FXP / R,U
1.NWAMNKPA / UGONMA D 2.NWAMNKPA / AMAJINDI O
3.NWAMNKPA / AMAJINDI NA 4.NWAMNKPA / ADAUGOAMAJI C
5,NWAMNKPA / CHINAZAEKPERE N
正則表達式:
(FXP \\ S {3,20})|(\\ r \\ s {3}。\\ S +(。+))
但這不是這行:
3.NWAMNKPA / AMAJINDI NA 4.NWAMNKPA / ADAUGOAMAJI C
只需要這兩個:
1.NWAMNKPA / UGONMA D 2.NWAMNKPA / AMAJINDI O
5,NWAMNKPA / CHINAZAEKPERE N
希望的輸出數:-
您可以查看RegexOptions.MultiLine
(和其他選項)。 ( http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx )
我建議您改用String.Split()
並一次驗證一行。 正則表達式很難閱讀,無需在更多行上匹配模式。 它使您的代碼更易於理解。
我不認為您的正則表達式正在做您認為正在做的事情。 第一部分沒問題,但是第二部分\\r\\s{3}.\\S+(.+)
正在尋找回車符,后面緊跟三個空格字符,然后是任意一個字符(是否有空格) ,其后是任意數量的非空白字符,然后是您捕獲的任意數量的字符。
這有很多問題。 首先,並非所有文本都有回車符( \\r
)-檢查換行符( \\n
)更為安全。 即使您的文本中確實有\\r
,之后也幾乎肯定會是\\n
(Windows用\\r\\n
結束行)。 不過, \\n
可能會吸收到\\s{3}
,具體取決於您的數據。
其次, +
是貪婪的運算符。 這意味着\\S+(.+)
中的第一個+
將匹配所有可能的內容,換句話說,所有非空白字符都將匹配,直到到達空白為止。 只有找到空白后 , (.+)
才會開始捕獲,並且它擁有的第一個字符將是空白。 或者,如果字符串中沒有剩余空格,則\\S+
將“回送”一個字符,以便.+
具有匹配的內容,在這種情況下,它僅是字符串的最后一個字符。
考慮到所有因素,我認為使用以下更簡單的方法會更好:
RegEx.Split(myData, @"(?=\d)").Where(s => !string.IsNullOrEmpty(s))
每當下一個字符為數字時,這就會拆分您的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.