贪婪的Python正则表达式捕获组包括;及;

贪婪的Python正则表达式捕获组包括;及;,python,regex,parsing,regular-language,Python,Regex,Parsing,Regular Language,我需要一些写正则表达式的帮助。我需要一个能够匹配以下模式(包括单词和数字、空格和逗号)的表达式: 第145行 第3544354行 第10、12行 行项目45、10、26 第10行和第45行 到目前为止,我写了一个表达式,其中包括前三种模式和所有案例变体: r'(?i)(line item[\.*\,*\s*\d+]+]+|line[\.*\,*\s*\d+]+|lines[\.*\,*\s*\d+]+|line items[\.*\,*\s*\d+]+)' 我想包括列出的最后两种模式,但不

我需要一些写正则表达式的帮助。我需要一个能够匹配以下模式(包括单词和数字、空格和逗号)的表达式:

  • 第145行
  • 第3544354行
  • 第10、12行
  • 行项目45、10、26
  • 第10行和第45行
到目前为止,我写了一个表达式,其中包括前三种模式和所有案例变体:

r'(?i)(line item[\.*\,*\s*\d+]+]+|line[\.*\,*\s*\d+]+|lines[\.*\,*\s*\d+]+|line items[\.*\,*\s*\d+]+)'
我想包括列出的最后两种模式,但不确定如何。通过修改捕获组,我为模式匹配“第10行和第45行”编写了以下表达式:

r'(Lines[\.*\,*\w*\s*\d+]+)'
然而,它并没有像预期的那样工作。它选择字符串中的所有单词字符。我想让我的表达式保持贪婪,但不确定如何实现列表中的最后两种模式

有什么建议吗?

您可以使用

(?i)lines?(?:\s+items?)?\s*\d+(?:\.\d+)?(?:\s*(?:,|and)\s*\d+(?:\.\d+)?)*

图案细节

  • (?i)
    -忽略内联大小写
  • 行?
    -
    (使前面的模式可选,匹配1或0次出现)
  • (?:\s+项?)
    -可选匹配1或0次出现的1+空格,后跟
    项和可选的
    s
    字符
  • \s*
    -0+空格
  • \d+(?:\.\d+)
    -1+位,后跟可选的
    和1+位序列
  • (?:\s*(?:,|和)\s*\d+(?:\。\d+)*
    -0次或多次重复
    • \s*
      -0+空格
    • (?:,|和)
      -
      字符序列
    • \s*
      -0+空格
    • \d+(?:\.\d+)
      -1+位,后跟可选的
      和1+位序列

。或者<代码>[…]是字符类,不是分组结构。太好了,非常感谢。你能简单解释一下这个表达吗?我在试图理解这两者的区别是什么?和()表示在表达式中。另外,我的文本中字符串的开头有“Line 96.1”,但这个公式没有捕获它,返回NA。你知道为什么吗?非常感谢。您没有尝试我的第二个链接解决方案。我贴了解释。太好了,你真的是一个正则表达式专家!再次感谢你。我将研究您的解释,并将其用作参考,以查看我所有的正则表达式。我不知道您的输入有多混乱,因此我建议使用最安全的模式。它有点长,但很精确。您可以进一步尝试替换正则表达式的某些部分,以查看它是否仍能满足您的需要,例如,将
\d+(?:\。\d+)
替换为
\d[。。*
,甚至将整个
\s*\d+(?:\。。。)(?:\s*(?:,|和)\s*\d+(?:\。。。。。。。。。*
替换为
(?:和.[\d+)*。)你好,维克托尔,我有一个简短的问题。如何使用“or”语句实现此模式?我希望表达式搜索并返回fmea或doc的所有实例,例如:r'((?I)(fmea | doc \-?)\s*\d+(?:\。\d+)(?:\s*(?:,|和)\s*\d+(?:\。\d+)),但表达式变为惰性。有小费吗?谢谢。@brightcitrus看起来您只包含了一个重复的字符串,看到了吗?这就是您想要的吗?@brightcitrus我对您的意思太不了解了。请提供一个可复制的示例。您可以使用此演示。