regex 如何限制Python正则表达式在负查找前要求所有字符时的“贪婪”

ki0zmccv  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(144)

我有4个匹配我的模式:

\d+\/?\d+\s[A-z]+.(?!\d)

Regex demo

需要解析4个字符串:

17 Howard Rd Howard. Stdnt 
11/169 Wall Road, Wontown, Wkr 
105 AGNEW, Marilyn Barbara 
106 AGNEW, Mavis Rosina

如果我在.后面加上*+匹配到字符串的末尾。所以我失去了匹配和否定查找。我如何重新配置这个正则表达式来扩展匹配,以便我得到4个完整的字符串?

nukf8bse

nukf8bse1#

您的模式至少匹配2位具有以下标记的数字\d+\/?\d+,请注意[A-z]matches more than[A-Za-z]
这部分中的点.(?!\d)也匹配一个空格,这就是为什么你的匹配在结尾有一个空格或逗号。
您可以用途:

(?<!\S)\d+(?:/\d+)?\s[A-Za-z].*?(?=\s+\d+\b|$)
  • (?<!\S)向左声明空白边界
  • \d+(?:/\d+)?将1+位数与可选的/和1+位数匹配
  • \s[A-Za-z].*?匹配一个空格字符,后跟一个字符A-Za-z,然后匹配尽可能少的字符
  • (?=正前瞻
  • \s+\d+\b匹配1+空格字符,1+数字
  • |
  • $字符串结尾
  • )关闭前瞻

Regex demo

相关问题