贪婪 Python 正则表达式捕获组包含 "and"
Greedy Python RegEx capturing group to include "and"
我需要一些帮助来编写正则表达式。我需要一个可以匹配以下模式(包括单词和数字、空格和逗号)的表达式:
- 第 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+]+)'
我想包括最后列出的两个模式,但不确定如何。我通过如下修改捕获组为模式匹配 "Lines 10 and 45" 编写了这个表达式:
r'(Lines[\.*\,*\w*\s*\d+]+)'
但是,它没有按预期工作。它选择字符串中的所有单词字符。我想让我的表达式保持贪婪,但不确定如何实现列表中的最后两个模式。
有什么建议吗?
您可以使用
(?i)lines?(?:\s+items?)?\s*\d+(?:\.\d+)?(?:\s*(?:,|and)\s*\d+(?:\.\d+)?)*
参见regex demo。
图案详情:
(?i)
- 忽略内联大小写 modifier
lines?
- line
或 lines
(?
quantifier 使前面的模式可选,匹配 1 次或 0 次出现)
(?:\s+items?)?
- 一个可选的 non-capturing group 匹配 1 次或 0 次出现的 1+ 个空格,后跟 item
和一个可选的 s
char
\s*
- 0+ 个空格
\d+(?:\.\d+)?
- 1+ 位数字后跟可选的 .
和 1+ 位数字
(?:\s*(?:,|and)\s*\d+(?:\.\d+)?)*
- 0 次或多次重复
\s*
- 0+ 个空格
(?:,|and)
- ,
或 and
字符序列
\s*
- 0+ 个空格
\d+(?:\.\d+)?
- 1+ 位数字后跟可选的 .
和 1+ 位数字
我需要一些帮助来编写正则表达式。我需要一个可以匹配以下模式(包括单词和数字、空格和逗号)的表达式:
- 第 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+]+)'
我想包括最后列出的两个模式,但不确定如何。我通过如下修改捕获组为模式匹配 "Lines 10 and 45" 编写了这个表达式:
r'(Lines[\.*\,*\w*\s*\d+]+)'
但是,它没有按预期工作。它选择字符串中的所有单词字符。我想让我的表达式保持贪婪,但不确定如何实现列表中的最后两个模式。
有什么建议吗?
您可以使用
(?i)lines?(?:\s+items?)?\s*\d+(?:\.\d+)?(?:\s*(?:,|and)\s*\d+(?:\.\d+)?)*
参见regex demo。
图案详情:
(?i)
- 忽略内联大小写 modifierlines?
-line
或lines
(?
quantifier 使前面的模式可选,匹配 1 次或 0 次出现)(?:\s+items?)?
- 一个可选的 non-capturing group 匹配 1 次或 0 次出现的 1+ 个空格,后跟item
和一个可选的s
char\s*
- 0+ 个空格\d+(?:\.\d+)?
- 1+ 位数字后跟可选的.
和 1+ 位数字(?:\s*(?:,|and)\s*\d+(?:\.\d+)?)*
- 0 次或多次重复\s*
- 0+ 个空格(?:,|and)
-,
或and
字符序列\s*
- 0+ 个空格\d+(?:\.\d+)?
- 1+ 位数字后跟可选的.
和 1+ 位数字