Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的Regex用于管理-&引用;_Python_Regex - Fatal编程技术网

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
    单词边界
  • [a-zA-Z0-9]+
    匹配列出的任何1+次
  • (?:
    非捕获组
    • -[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']