簡體   English   中英

多行字符串模式的正則表達式

[英]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

希望的輸出數:-

  1. NWAMNKPA / UGONMA D
  2. NWAMNKPA / AMAJINDI O
  3. NWAMNKPA / AMAJINDI NA
  4. NWAMNKPA / ADAUGOAMAJI C
  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM