python中的Regex用于管理-&引用;
我正在寻找一个正则表达式,它适合于python中的Regex用于管理-&引用;,python,regex,Python,Regex,我正在寻找一个正则表达式,它适合于准备工作,今天准备工作,准备工作。我一直以这种方式放置多个选项: text=''' ready-to-work ready-to ready-to-work-today''' re.findall(r'\b[a-zA-Z0-9]+?-[a-zA-Z0-9]+?-[a-zA-Z0-9]+?\b', text) 我设法找到了最多三个术语的表达式,例如['ready-to-work'],但我无法捕获ready-to和ready-to-work today。我期望[
准备工作
,今天准备工作
,准备工作
。我一直以这种方式放置多个选项:
text=''' ready-to-work ready-to ready-to-work-today'''
re.findall(r'\b[a-zA-Z0-9]+?-[a-zA-Z0-9]+?-[a-zA-Z0-9]+?\b', text)
我设法找到了最多三个术语的表达式,例如['ready-to-work']
,但我无法捕获ready-to
和ready-to-work today
。我期望['ready-to-work','ready-to','ready-to-work-today']
谢谢你的帮助。试试这个正则表达式
\b\w+(\w+)+\b
如果你想匹配连字符和字符类的第1-3部分,你可以使用一个非捕获组和一个量词{1,3}
。要将它们匹配1+次,请改用+
\b[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+){1,3}\b
单词边界\b
匹配列出的任何1+次[a-zA-Z0-9]+
非捕获组(?:
匹配-[a-zA-Z0-9]+
并将列出的任何一个匹配项乘以1+-
关闭非捕获组并重复1-3次){1,3}
单词边界\b
我猜这个表达式可能会返回所需的输出:
\b(?:\w+-\w+(?:[\w-])*)\b
使用re.findall进行测试
输出
演示
如果要探索/简化/修改该表达式,请在的右上面板中进行说明 那么r'[\w-]+'
呢?或者必须至少有一个-
?您的规范相当不精确。您希望它与什么匹配?谢谢,但我发现:['-work','-to','-today']。。。这是每个学期的最后一个单词。根据你的建议,我做了:re.findall(r'\b(\w+[\-\w+]+)\b',text)。这就是我想要的结果。谢谢。正则表达式工作得很好,只是您只需要退出match.group(1)
。在整个正则表达式周围添加另一对括号,或者简单地拉出完整的匹配项。
import re
regex = r"\b(?:\w+-\w+(?:[\w-])*)\b"
test_str = "ready-to-work ready-to-work-today ready-to ready-to-work ready-to ready-to-work-today ready-to ready-to-work-todayready-to ready-to-work-today"
print(re.findall(regex, test_str))
['ready-to-work', 'ready-to-work-today', 'ready-to', 'ready-to-work', 'ready-to', 'ready-to-work-today', 'ready-to', 'ready-to-work-todayready-to', 'ready-to-work-today']