gpt4 book ai didi

带有可选但贪婪组的 Python 正则表达式

转载 作者:太空狗 更新时间:2023-10-30 00:08:27 26 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式来匹配可能包含或不包含两个标记的字符串。我需要表达式返回字符串的所有五个元素,具体取决于它们是否存在,但是当我将标记设为可选时,通配符位似乎吞噬了它们:

输入可以是:

text{a}more{b}words  
{a}text{b}test
text
text{b}text
text{b}
text{a}text

等等。唯一可以保证的是 <a>永远在 <b> 之前,前提是它们存在。

现在我的表情如下所示:

^(.*?)(\{a\})?(.*?)(\{b\})?(.*?)$

不幸的是,这最终会将所有文本都扔到最后一组,无论标签是否存在。有没有办法让它们变得贪婪,同时又让它们保持可选? re.findall不幸的是,似乎也没有帮助。

任何帮助将不胜感激! :)

最佳答案

尝试以下正则表达式:^(.*(?={a})|.*?)({a})?(.*(?={b})|.*)({b })?(.*?)$

import re

inputs = ['{a}text{b}test', 'text', 'text{b}text', 'text{b}', 'text{a}text']
p = re.compile(r"^(.*(?={a})|.*?)({a})?(.*(?={b})|.*)({b})?(.*?)$")
for input in inputs:
print p.match(input).groups()

输出:

('', '{a}', 'text', '{b}', 'test')
('', None, 'text', None, '')
('', None, 'text', '{b}', 'text')
('', None, 'text', '{b}', '')
('text', '{a}', 'text', None, '')

关于带有可选但贪婪组的 Python 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5095437/

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