Greedy Python RegEx捕获组以包括“和”

问题描述 投票:0回答:1

我需要一些帮助编写RegEx表达式。我需要一个可以匹配以下模式的表达式(包括单词和数字,空格和逗号):

  • 第145行
  • Line3544354
  • 第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+]+)'

但是,它不能按预期方式工作。它选择字符串中的所有单词字符。我想保持表情贪婪,但不确定如何实现列表中的最后两种模式。

有什么建议吗?

谢谢

python regex parsing regular-language
1个回答
0
投票

您可以使用

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

请参见regex demo。详细信息:

  • [(?i)-忽略大小写修饰符
  • [lines?-linelines?使前面的模式为可选,匹配1或0次出现)]
  • [(?:\s+items?)?-匹配1个或0个出现的1+个空格的可选非捕获组,后跟item和可选s字符
  • \s*-0+空格
  • [\d+(?:\.\d+)?-1+位数字后跟.和1+位数字的可选序列]
  • (?:\s*(?:,|and)\s*\d+(?:\.\d+)?)*-0或更多重复
    • \s*-0+空格
    • [(?:,|and)-,and字符序列
    • \s*-0+空格
    • [\d+(?:\.\d+)?-1+位数字后跟.和1+位数字的可选序列]
© www.soinside.com 2019 - 2024. All rights reserved.