Python 如何获取字符串中键的值,后跟另一个特定键=值集

Python 如何获取字符串中键的值,后跟另一个特定键=值集,python,regex,Python,Regex,我的代码如下: string = "title=abcd color=green title=efgh color=blue title=xyxyx color=yellow title=whatIwaht color=red title=xxxy red=anything title=xxxyyy color=red" pattern = r'title=(.*?) color=red' print re.compile(pattern).search(string).group(0) 我得

我的代码如下:

string = "title=abcd color=green title=efgh color=blue title=xyxyx color=yellow title=whatIwaht color=red title=xxxy red=anything title=xxxyyy color=red"
pattern = r'title=(.*?) color=red'
print re.compile(pattern).search(string).group(0)
我得到了

"title=abcd color=green title=efgh color=blue title=xyxyx color=yellow title=whatIwaht color=red title=xxxy red=anything title=xxxyyy color=red"

但是我想找到紧跟在“color=red”之后的“title”的所有内容

你想要紧跟在“color=red”之前的内容吗?然后使用

.*title=(.*?) color=red
演示:

这与
color=red
之前的所有内容都非常匹配,因此只显示所需的标题


或者,如果您知道有一个字符没有出现在标题中,您可以通过使用字符类排除来简化。例如,如果您知道
=
不会出现:

title=([^=]*?) color=red
title=([^\s]*?) color=red
或者,如果您知道空格不会出现:

title=([^=]*?) color=red
title=([^\s]*?) color=red

第三个选项,使用一点代码查找所有红色标题(假设输入总是交替显示标题、颜色):


为什么不跳过正则表达式,改用一些拆分功能:

search_title = False
found = None
string = "title=abcd color=green title=efgh color=blue title=xyxyx color=yellow title=whatIwaht colo\
r=red title=xxxy red=anything title=xxxyyy color=red"
parts = string.split()
for part in parts:
    key, value = part.split('=', 1)
    if search_title:
        if key == 'title':
            found = value
        search_title = False
    if key == 'color' and value == 'red':
        search_title = True
print(found)
导致

xxxy
正则表达式很好,但有时会引起头痛。

使用模块试试这个


如果您想在某个regexp之前获得子regexp的最后一个匹配项,那么解决方案是使用贪婪的skipper。例如:

>>> pattern = '.*title="([^"]*)".*color="#123"'
>>> text = 'title="123" color="#456" title="789" color="#123"'
>>> print(re.match(pattern, s).groups(1))
第一个
*
是贪婪的,它将尽可能多地跳过(从而跳过第一个
标题
)备份到允许匹配所需颜色的

作为一个更简单的例子,考虑

a(.*)b(.*)c
处理于

a1111b2222b3333c

将在第一组中匹配
1111b2222
,在第二组中匹配
3333

您希望该模式返回什么?“接近”:您需要更清楚地定义它。一个像“and”这样的短单词的间隔是否少于10个空格?示例:
title=“a”color=“white”和title=“b”\\\\\\\\\\\\\\\\\\\\\\\\\color=“black”
,什么应该匹配什么?(我不得不避开空格,只是在心里去掉反斜杠。)@Evert我更新了问题。谢谢。我已经将这个难以理解的标题改为更一般的标题(我假设标题仍然反映了您想要达到的目标)。空格是“title=atitle”和“color=acolor”之间的唯一分隔符,还是可以有句号、逗号、分号、制表符等?如果有多个“title=xxxx”color=red,这个模式只得到最后一个?然后使用第二个部分。选项2正是我想要的,非常感谢