Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于某些原因,Python正则表达式与字符串不匹配_Python_Regex - Fatal编程技术网

由于某些原因,Python正则表达式与字符串不匹配

由于某些原因,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

我手头有一本英语词典的内容,我想找到一个具体例句的定义

例如,我想找到“示例句子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 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
放在正则表达式中。关于这一点,已有很多问答。