Python regex with \w does n

2024-06-16 10:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

我找不到匹配的。在

如果我使用正则表达式:

^{pr2}$

我得到了: “是我的车”还有。我的车'(我忽略案件和使用多线)

为什么带有\w+\b的正则表达式找不到任何内容?应该有两个词和“我的车” 如果在“我的车”之前有两个词,我怎么能得到两个完整的单词呢。如果我的车前面只有一个字,我应该会明白的。如果前面没有文字,我只能得到'我的车'。在我的字符串示例中,我应该得到:“雪佛兰是我的车”和“我的车”(这里没有前面的单词)


Tags: and字符串ismyprettyred单词car
1条回答
网友
1楼 · 发布于 2024-06-16 10:32:57

在您的r'[\w+\b|^][\w+\b]my car正则表达式中,[\w+\b|^]匹配1个符号,该符号可以是单词字符、+、backdpace、|或{}和{}匹配1个符号,该符号可以是单词字符、+,或者是退格符。在

关键是在字符类中,量词和许多(但不是所有的)特殊字符匹配文字符号。E、 g.[+]匹配加号,[|^]匹配|或{}。由于要匹配序列,因此需要在字符类之外提供一系列子模式。在

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

例如,要找到两个单词和“我的车”,可以使用

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

请参见regex demo(这里,\S+匹配一个或多个非空白符号,\s+匹配1个或多个空白,这两个连续子模式的2次出现将这些符号作为序列进行匹配。在

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

^{pr2}$

请参见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]替换它来匹配任何水平空格,或者{}如果您还计划匹配换行符)。在
  • my car-一个文本my car。在

相关问题 更多 >