【问题标题】:How are regex quantifiers applied?如何应用正则表达式量词?
【发布时间】:2016-09-14 01:45:59
【问题描述】:

我有以下正则表达式:

res = re.finditer(r'(?:\w+[ \t,]+){0,4}my car',txt,re.IGNORECASE|re.MULTILINE)
for item in res:
    print(item.group())

当我将此正则表达式与以下字符串一起使用时:

“我的房子是白色的,我的车是红色的。 马在路上疾驰,我的车开得很慢。”

我得到以下结果:

  • 房子漆成白色,我的车
  • 路,我开车

我的问题是关于应该适用于整个组的量词{0,4}。该组收集带有表达式\w+ 的单词和一些带有[ ] 的分隔符号。量词是否仅适用于\w+ 定义的“单词”?在结果中,我得到了 4 个单词加上空格和逗号。我不清楚。

【问题讨论】:

  • 但是我得到了超过 4 个符号。如果你计算单词空格和逗号。
  • 您最多可以使用四个系列的单词+空格/逗号。

标签: python regex python-3.x


【解决方案1】:

所以,这就是正在发生的事情。您正在使用 ?: 创建一个非捕获组,该组收集 1 个或多个“单词”,后跟 [ \t,] (空格、制表符或逗号),匹配前面的一个或多个。 {0,4} 匹配 0-4 个非捕获组。所以它会查看单词“my car”并捕获它之前的 4 个单词,因为所有 4 个单词都匹配 \w+ 和 ,并且空格会被您指定的字符集吃掉。

分解得更简洁

(?: -- Non capturing group
\w+ Grab all words
[ \t,]+ -- Grab all spaces, comma, or tab characters
) -- End capture group
{0,4} -- Match the previous capture group 0-4 times
my car -- Based off where you find the words "my car"

因此,这将匹配“我的车”出现之前的 0-4 个单词/空格/逗号/制表符

这是书面的工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 2011-10-12
    • 2012-01-23
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    相关资源
    最近更新 更多