使用正则表达式Python提取特殊字符之间的字符

2024-09-21 09:38:03 发布

您现在位置:Python中文网/ 问答频道 /正文

无法使用以下代码提取特殊字符=&之间的项

import re
tags = ["letter1=A&letter2=B&letter3=C",
    "letter1=D&letter2=E&letter3=F"]


pat=r"^.*\='(.*)'\&.*$"
result = re.search(pat, tags [0])

返回empty

但是,我希望输出如下

输出

A B C

Tags: 代码importresearchtagsresultemptypat
3条回答

代码:

import re
tags = [
    "letter1=A&letter2=B&letter3=C",
    "letter1=D&letter2=E&letter3=F"
    ]
pat=re.compile("(\w+)=(\w+)")
for tag in tags:
    print(pat.findall(tag))

输出:

[('letter1', 'A'), ('letter2', 'B'), ('letter3', 'C')]
[('letter1', 'D'), ('letter2', 'E'), ('letter3', 'F')]

对于预期的输出,请查找结尾处有一个或没有&符号的=后面的字母:

>>> re.findall('=(\w)[&]{0,1}', tags[0])
#output
['A', 'B', 'C']

要真正得到答案,您可以使用split

from itertools import chain
tags = ["letter1=A&letter2=B&letter3=C",
    "letter1=D&letter2=E&letter3=F"]
tags = chain.from_iterable(item.split("&") for item in tags)
result = [item.split("=")[1] for item in tags]
# ['A', 'B', 'C', 'D', 'E', 'F']

根据您的模式,您不能真正获得A B C,因为C周围没有=&。此代码

import re
from itertools import chain
tags = ["letter1=A&letter2=B&letter3=C",
    "letter1=D&letter2=E&letter3=F"]
pattern = re.compile("=(.*?)&")
result = ' '.join(chain.from_iterable([pattern.findall(item) for item in tags]))

给予

A B D E

相关问题 更多 >

    热门问题