多行字符串模式的正则表达式
本文关键字:正则表达式 模式 字符串 | 更新日期: 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:-
- NWAMNKPA/UGONMA D
- NWAMNKPA/AMAJINDI O
- nwamnkpa/amajindi in a
- NWAMNKPA/ADAUGOAMAJI C
- 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))
每当下一个字符是数字时,将拆分数据