gpt4 book ai didi

python - 正则表达式获取括号外的所有文本

转载 作者:太空狗 更新时间:2023-10-29 21:17:32 26 4
gpt4 key购买 nike

我正在尝试使用正则表达式获取括号外的任何文本。

示例字符串

Josie Smith [3996 COLLEGE AVENUE, SOMETOWN, MD 21003]Mugsy Dog Smith [2560 OAK ST, GLENMEADE, WI 14098]

我可以通过以下方式成功获取方括号内的文本:

addrs = re.findall(r"\[(.*?)\]", example_str)
print addrs
[u'3996 COLLEGE AVENUE, SOMETOWN, MD 21003',u'2560 OAK ST, GLENMEADE, WI 14098']

但我无法获取方括号之外 的任何内容。我试过类似下面的东西:

names = re.findall(r"(.*?)\[.*\]+", example_str)

但这只能找到名字:

print names
[u'Josie Smith ']

到目前为止,我只看到一个字符串包含一到两个 name [address] 组合,但我假设一个字符串中可能有任意数量的组合。

最佳答案

如果没有嵌套的括号,你可以这样做:

re.findall(r'(.*?)\[.*?\]', example_str)

但是,您在这里甚至不需要正则表达式。只需拆分括号:

(s.split(']')[-1] for s in example_str.split('['))

您的尝试失败的唯一原因:

re.findall(r"(.*?)\[.*\]+", example_str)

... 是您在括号内进行非贪婪匹配,这意味着它捕获从第一个左括号到最后一个右括号的所有内容,而不是仅捕获第一对括号。


另外,最后的+好像不对。如果你有'abc [def][ghi] jkl[mno]',你想找回['abc', '', 'jkl'],或者 ['abc', 'jkl']?如果是前者,不要添加+。如果是后者,则执行 - 但您需要将整个括号内的模式放在非捕获组中:r'(.*?)(?:\[.*?\])+ .


如果在最后一个括号后可能有额外的文本,split 方法可以正常工作,或者您可以使用 re.split 而不是 re.findall …但是如果你想调整你原来的正则表达式来处理它,你可以。

在英语中,您想要的是括号内的子字符串字符串结尾之前的任何(非贪婪)子字符串,对吧?

因此,您需要在 \[.*?\]$ 之间交替。当然,您需要对其进行分组才能编写交替,并且您不想捕获该组。所以:

re.findall(r"(.*?)(?:\[.*?\]|$)", example_str)

关于python - 正则表达式获取括号外的所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17284947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com