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正是我想要的,非常感谢