多行字符串模式的正则表达式

本文关键字:正则表达式 模式 字符串 | 更新日期: 2023-09-27 18:13:15

我正在为多行字符串模式创建正则表达式,但它不工作。这是我的输入模式

FXP/R U

1。Nwamnkpa/ugonma d 2。NWAMNKPA/AMAJINDI O
3.4. Nwamnkpa/amajindiNWAMNKPA/ADAUGOAMAJI C
5.NWAMNKPA/CHINAZAEKPERE N

正则表达式:

(FXP ' S {20} 3) | (' r '{3}。' S + (+))

,但它不是这样的:

3。4. Nwamnkpa/amajindiNWAMNKPA/ADAUGOAMAJI C

只需要这两个:

1。Nwamnkpa/ugonma d 2。NWAMNKPA
5.NWAMNKPA/CHINAZAEKPERE N

期望o/p:-

  1. NWAMNKPA/UGONMA D
  2. NWAMNKPA/AMAJINDI O
  3. nwamnkpa/amajindi in a
  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))

每当下一个字符是数字时,将拆分数据