我正在尝试使用正则表达式捕获部分标题,但为什么我能够使用此捕获“4.1常规”,但是如果我在正则表达式的末尾添加换行符\n([\d\.]+ ?\w+)\n
它不再捕获那条线?是不是后面跟换行了还是我错过了什么?
Here's my example for reference
\n([\d\.]+ ?\w+)
输入
3.6.10
POLLUTION DEGREE 4
continuous conductivity occurs due to conductive dust, rain or other wet conditions
3.6.11
CLEARANCE
shortest distance in air between two conductive parts
3.6.12
CREEPAGE DISTANCE
shortest distance along the surface of a solid insulating material between two conductive
parts
4 Tests
4.1 General
Tests in this standard are TYPE TESTS to be carried out on samples of equipment or parts.
\n([\d\.]+ ?\w+)\n?
似乎也不起作用。
答案 0 :(得分:2)
这是重叠匹配的经典案例。上一个匹配包含\n4 Tests\n
,最后\n
已被消耗,从而阻止了下一场比赛。
我认为您希望匹配文本整行的文本,因此,使用^
选项使用$
和RegexOptions.Multiline
锚点更有意义:
@"(?m)^([\d.]+ ?\w+)\r?$"
请注意,.NET正则表达式中的$
仅在\n
之前匹配,并且由于Windows行结尾为CRLF,因此需要在$
之前使用可选CR,{{1} }。
结果:
答案 1 :(得分:0)
您是否认为新行可能不是单个字符?
\n([0-9\.]+ ?\w+)(\n|\r)
使用Expresso,上面的正则表达式有4个样本匹配,最后一个是
[LF]4.1 General[CR]
其中[LF]为\ n且[CR]为\ r。
请记住[CR],[LF]和[CRLF]都是行尾的可能名称。