复杂正则表达式搜索短语,然后搜索有限范围内的数字

时间:2013-06-20 08:08:11

标签: regex

我正在努力理解为什么以下这些不起作用。

\b(?:CNC\W+(?:\w+\W+){1,6}[\d])\b

每个部分都可以在那里工作,我可以找到关键短语,或者我可以找到数字和6个字内的匹配在同一系统中的其他正则表达式中工作。

在来到这里之前,我一直在使用RegexBuddy构建代码并检查各种网站。

我只是不明白为什么这不起作用。我仅限于在环境中使用基于python的正则表达式。

我希望得到一个可以解决问题的答案,但我真的很想知道我哪里出错了

此致

1 个答案:

答案 0 :(得分:0)

您可以使用

(\d+)\W+(?:\w+\W+){0,5}CNC\b|\bCNC\W+(?:\w+\W+){0,5}(\d+)

regex demo is available here。您的期望值在组1和组2中。

详细信息

  • (\d+)-捕获第1组:一个或多个数字
  • \W+-1个以上的非单词字符
  • (?:\w+\W+){0,5}-1个单词字符和1个非单词字符的0到5次重复
  • CNC\b-整个词CNC
  • |-或
  • \bCNC-全字CNC
  • \W+-1个以上的非单词字符
  • (?:\w+\W+){0,5}-1个单词字符和1个非单词字符的0到5次重复
  • (\d+)-捕获第2组:一个或多个数字

Python中:

import re
s = '''the number of CNC machines equalled 5 I want to match "CNC operators numbering 12" and the reverse like "There are 12 qualified CNC operators on site'''
rx = r'(\d+)\W+(?:\w+\W+){0,5}CNC\b|\bCNC\W+(?:\w+\W+){0,5}(\d+)'
print(["{}{}".format(x,y) for x,y in re.findall(rx, s)])
# => ['5', '12', '12']