由于某些原因,Python正则表达式与字符串不匹配
我手头有一本英语词典的内容,我想找到一个具体例句的定义 例如,我想找到“示例句子2b”的定义。在我看来,代码可能看起来像这样:由于某些原因,Python正则表达式与字符串不匹配,python,regex,Python,Regex,我手头有一本英语词典的内容,我想找到一个具体例句的定义 例如,我想找到“示例句子2b”的定义。在我看来,代码可能看起来像这样: re.search(r'\d\. ([^\n]*?)\n(?!.*\d\. ).*?example sentence 2b', content, flags=re.DOTALL) 在此,“内容”如下: 1. definition1 example sentence 1a example sentence 1b 2. definition2 example senten
re.search(r'\d\. ([^\n]*?)\n(?!.*\d\. ).*?example sentence 2b', content, flags=re.DOTALL)
在此,“内容”如下:
1. definition1
example sentence 1a
example sentence 1b
2. definition2
example sentence 2a
example sentence 2b
3. definition3
example sentence 3a
example sentence 3b
现场测试-
正如你在现场测试中看到的,我没有得到想要的匹配——“定义2”。我真的不知道为什么
PS:我使用了
(?!.*\d\)..
基于此帖子-您可以使用以下模式,而不使用re.DOTALL
标志:
^\d+\. (.*)(?:\n(?!\d+\. ).*)\nexample sentence 2b
细分:
-行的开头^
\d+\代码>-匹配一个或多个数字,然后是一个点和一个空格字符
-匹配零个或多个字符并在组1中捕获它们(.*)
-非捕获组的开始。(?:
-匹配不后跟“定义行”的换行符\n(?!\d+\)
-匹配零个或多个字符*
-关闭非捕获组)
-匹配换行符,后跟目标句子\n例如句子2b
\n
字符。
默认情况下,因此“.*?”
与“示例语句2b”前的换行符不匹配。使用re.DOTALL
标志,或者在可以出现换行符的地方将显式\n
放在正则表达式中。关于这一点,已有很多问答。