python - 正则表达式:在前瞻断言的最后一场比赛之后直到前瞻断言的第一场比赛之后查找文本

标签 python regex

我有这样一段文字:

Hans Wurst, geboren 25.01.1987, zuletzt tätig als Metzger, Breslauer Str. 15, 02708 Löbau

我想从中获取街道名称(“Breslauer Str. 15”)。所以我使用了如下所示的正则表达式:

(?<=, )(.+?)(?=,[\s]?[0-9]{5})

但是这是贪心的,并且匹配:

geboren 25.01.1987, zuletzt tätig als Metzger, Breslauer Str. 15

我怎样才能使它不那么贪婪,以便在考虑先行断言 (?=,[\s]?[0-9]{5}) 的情况下,基本上它采用逗号的最新出现?

最佳答案

只需在正则表达式模式的开头添加 [^,].* 即可。模式 [^,].* 表示“非逗号”后跟任何字符任意次数。

RegEx Demo

Python 演示:

import re

s = 'Hans Wurst, geboren 25.01.1987, zuletzt tätig als Metzger, Breslauer Str. 15, 02708 Löbau'
m = re.search(r'[^,].*(?<=, )(.+)(?=,[\s]?[0-9]{5})', s)
if m:
    print(m.group(1))

输出:

Breslauer Str. 15

关于python - 正则表达式:在前瞻断言的最后一场比赛之后直到前瞻断言的第一场比赛之后查找文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69890357/

相关文章:

python - 将 HDF 数据集加载到 python 中,但它被识别为空

python - 如何在 Jupyter Notebook 的输出中显示整个表格

python - uWSGI 的 reload-on-rss 是每个 worker/process 吗?

java - 需要一种方法来打印 java 中正则表达式模式的先行部分吗?

javascript - 需要 RegExpr 建议 - 从字符串中删除除数字 (0-9) 和 "/"之外的所有字符

regex - 如何在 Perl 中使用 WWW::Mechanize::Firefox 和 find_link_dom 查找第二个链接出现?

python - 使用括号的正则表达式模式 '[]'

python - 为 Python 脚本更改 DNS 服务器

python - sort() 不适用于列表理解

java - 我可以使用正则表达式匹配特定字符的每三次出现吗?