1

我试图理解为什么以下剂量不起作用。

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

每个部分都将在那里独立工作,我可以找到关键短语,或者我可以找到数字,并且 6 个单词内的匹配项在同一系统中的其他正则表达式中有效。

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

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

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

问候

4

1 回答 1

0

您可以使用

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

则表达式演示可在此处获得。您的期望值在第 1 组和第 2 组中。

细节

  • (\d+)- 捕获组 1:一位或多位数字
  • \W+- 1+ 非单词字符
  • (?:\w+\W+){0,5}- 0 到 5 次重复 1+ 单词字符和 1+ 非单词字符
  • CNC\b- 一个完整的词CNC
  • |- 或者
  • \bCNC- 全词CNC
  • \W+- 1+ 非单词字符
  • (?:\w+\W+){0,5}- 0 到 5 次重复 1+ 单词字符和 1+ 非单词字符
  • (\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']
于 2019-06-14T22:55:22.743 回答