如何使用pythons find获取多元组

2024-10-03 13:23:17 发布

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

我正在尝试使用python findall()从下面的“text”中获取多个元组

text = '[szur formatter] line 1<?xml version="1.0"?><star>[szur parser] line 2<?xml version="1.0"?><Planet>'

我想从“文本”中获得以下匹配模式

    Match 1
    [szur formatter] line 1 
    <?xml version="1.0"?><star>

    Match 2
    [szur parser] line 2
    <?xml version="1.0"?><Planet> 

我想用这个正则表达式和芬德尔一起做这个

re.findall(r'\[(szur.*?[^<])(<.*>+)', text)

这就产生了

[('szur formatter] line 1', '<?xml version="1.0"?><star>[szur parser] line 2<?xml version="1.0"?><Planet>')]

如何达到预期的效果。我的正则表达式不会产生第二个元组。我需要怎样修改我的正则表达式才能得到这个?任何提示都将不胜感激。你知道吗


Tags: text文本reparserversionformattermatchline
2条回答

我想知道这是否是一个好主意(即使用正则表达式),但这里您可以:

\[szur[^][]*\].*?<\w+>

使用DOTALL修饰符并参见a demo on regex101.com


Python中:
import re

string = """[szur formatter] line 1<?xml version="1.0"?><star>[szur parser] line 2<?xml version="1.0"?><Planet>"""

rx = re.compile(r'(\[szur[^][]*\].*?<\w+>)')

matches = rx.findall(string)
# matches = rx.findall(string, re.DOTALL)
print(matches)

下面是一个regexp,它做了一些假设:

>>> re.findall(r"(\[szur.*?[^\]]\] line \d*)([^\[]*)", text)
[('[szur formatter] line 1', '<?xml version="1.0"?><star>'), 
 ('[szur parser] line 2',    '<?xml version="1.0"?><Planet>')]

但说真的,伙计,如果你发现自己在用regexp解析XML和非XML的混合,问问自己:“我是怎么到这里来的?”你知道吗

相关问题 更多 >