Regex 如何排除带有。。。正则表达式中的

Regex 如何排除带有。。。正则表达式中的,regex,Regex,我的文件中有以下目录和章节: 1.2 Purpose .................... 8 1.3 System Overview ............ 8 1.4 Document Overview .......... 8 1.5 Definitions and Acronyms ......... 9 2.1.3.3.8 FOO 2.1.3.3.9 BAR 2.1.4 TEST 我想提取节名,忽略作为目录一部分的行 我一直在尝试这个正则表达式: ^(

我的文件中有以下目录和章节:

1.2 Purpose .................... 8  
1.3 System Overview ............ 8  
1.4 Document Overview .......... 8  
1.5 Definitions and Acronyms ......... 9  
2.1.3.3.8   FOO 
2.1.3.3.9  BAR 
2.1.4 TEST
我想提取节名,忽略作为目录一部分的行

我一直在尝试这个正则表达式:

^((?:\d{1,2}\.)+(?:\d{1,2})+)\s.+(?!\.\.\.).*$
但是,我一直在捕获目录行

如何排除带有….的行。。。。弦


谢谢

这里的问题是,您只在一个非常特定的位置排除了
s;你的消极前瞻比赛没有超出它所处的位置。考虑一下:

^(\d{1,2}(?:\.\d{1,2})*)\s*[^.]*(?!.*\.{3}).*$
#                                  ^^

…下面带有胡萝卜的字符非常重要:它们不仅使负前瞻适用于该特定点,而且也适用于该点之后的任何位置。

它是逐行的。我希望\1包含非TOC行中的节号。节名之后是否没有
。只有TOC行可以。因为您之前有一个
+
,之后有一个
*
,所以原始版本实际上可以选择它想要找到的任何位置,
(?!\.\.\.\.\.\.\.\.\)
不匹配的位置——如果它找到任何一个这样的位置,您将获得成功。成功了。非常感谢。我认为,这一点对于引擎来说更容易一些:。@Stribizev,这是一个很好的调用——在做出否定断言之前,最好使用所有可用的空格;实际上,可以以相同的方式使用任何非期间内容。