gpt4 book ai didi

带有\w 的 Python 正则表达式不起作用

转载 作者:行者123 更新时间:2023-11-28 20:39:02 26 4
gpt4 key购买 nike

我想要一个正则表达式来查找一个短语和它前面的两个单词(如果有两个单词)。例如我有字符串(每行一个句子):

Chevy is my car and Rusty is my horse. My car is very pretty my dog is red.

如果我使用正则表达式:

re.finditer(r'[\w+\b|^][\w+\b]my car',txt)

我没有得到任何匹配。

如果我使用正则表达式:

re.finditer(r'[\S+\s|^][\S+\s]my car',txt)

我得到:是我的车'和'。我的车'(我忽略大小写并使用多行)

为什么带\w+\b 的正则表达式找不到任何东西?它应该找到两个词和“我的车”如果有两个词,我怎样才能在“我的车”之前得到两个完整的词。如果我的车前面只有一个词,我应该得到它。如果前面没有单词,我应该只得到“我的车”。在我的字符串示例中,我应该得到:'Chevy is my car' 和 'My car'(这里没有前面的词)

最佳答案

在你的 r'[\w+\b|^][\w+\b]my car 正则表达式中,[\w+\b|^] 匹配 1 个符号那是一个单词 char、+、backdpace、|^[\w+\b] 匹配 1 个符号,它可以是单词 char、+ 或退格键。

重点是在字符类中,量词和很多(但不是全部)特殊字符匹配文字符号。例如。 [+] 匹配加号,[|^] 匹配 |^。由于您想要匹配一个序列,因此您需要在字符类之外提供一系列子模式。

似乎您打算使用 \b 作为单词边界,但是,字符类中的 \b 仅匹配退格字符。

找到“我的车”这两个词,您可以使用例如

\S+\s+\S+\s+my car

参见 regex demo (此处,\S+ 匹配一个或多个非空白符号,而 \s+ 匹配 1 个或多个空白,并且这 2 个连续子模式的 2 次出现与这些符号匹配为序列)。

要使 my car 之前的序列可选,只需使用 {0,2} 量词,如下所示:

(?:\S+[ \t]+){0,2}my car

参见 this regex demo (与 re.IGNORECASE 标志一起使用)。参见 Python demo :

import re
txt = 'Chevy is my car and Rusty is my horse.\nMy car is very pretty my dog is red.'
print(re.findall(r'(?:\S+[ \t]+){0,2}my car', txt, re.I))

详细信息:

  • (?:\S+[\t]+){0,2} - 0 到 2 个 1+ 非空白后跟 1+ 空格或制表符的序列(您也可以替换它与 [^\S\r\n] 匹配任何水平空间或 \s 如果您还计划匹配换行符)。
  • my car - 文字文本my car

关于带有\w 的 Python 正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39446341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com