我正在努力理解为什么以下这些不起作用。
\b(?:CNC\W+(?:\w+\W+){1,6}[\d])\b
每个部分都可以在那里工作,我可以找到关键短语,或者我可以找到数字和6个字内的匹配在同一系统中的其他正则表达式中工作。
在来到这里之前,我一直在使用RegexBuddy构建代码并检查各种网站。
我只是不明白为什么这不起作用。我仅限于在环境中使用基于python的正则表达式。
我希望得到一个可以解决问题的答案,但我真的很想知道我哪里出错了
此致
答案 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']