【发布时间】:2020-03-15 08:52:30
【问题描述】:
我需要一些帮助来编写正则表达式。我需要一个可以匹配以下模式的表达式(包括单词和数字、空格和逗号):
- 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+]+)'
但是,它没有按预期工作。它选择字符串中的所有单词字符。我想让我的表达保持贪婪,但不确定如何实现列表中的最后两个模式。
有什么建议吗?
【问题讨论】:
-
(?i)lines?(?:\s+items?)?\s*\d+(?:\s*(?:,|and)\s*\d+)*。或this one。[...]是字符类,不是分组结构。 -
太好了,非常感谢。你能分享一下这个表达的简要解释吗?我想了解有什么不同?和 () 表示在表达式中。
-
我的文本中的字符串开头也有“Line 96.1”,但这个公式没有捕获它并返回 NA。你知道为什么吗?谢谢!
-
您没有尝试我的第二个链接解决方案。我发布了它并附有解释。
标签: python regex parsing regular-language