我需要一些帮助编写正则表达式的内容。我需要一个可以匹配以下模式(包括单词和数字,空格和逗号)的表达式:
到目前为止,我写了一个表达式,其中包括前三个模式和所有大小写的变化:
r'(?i)(line item[\.*\,*\s*\d+]+]+|line[\.*\,*\s*\d+]+|lines[\.*\,*\s*\d+]+|line items[\.*\,*\s*\d+]+)'
我想列出列出的最后两种模式,但不确定如何。我通过如下修改捕获组为匹配“第10行和第45行”的模式编写了该表达式:
r'(Lines[\.*\,*\w*\s*\d+]+)'
但是,它不能按预期工作。它选择字符串中的所有单词字符。我想保持表情贪婪,但是不确定如何实现列表中的最后两种模式。
有什么建议吗?
答案 0 :(得分:2)
您可以使用
(?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个以上的可选数字