我正在尝试使用python findall()
从以下'text'获取多个元组φ2 = asin( sin φ1 ⋅ cos δ + cos φ1 ⋅ sin δ ⋅ cos θ )
λ2 = λ1 + atan2( sin θ ⋅ sin δ ⋅ cos φ1, cos δ − sin φ1 ⋅ sin φ2 )
我想从'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)
如何获得预期结果。我的正则表达式不会产生第二个元组。我如何修改我的正则表达式以获得此功能?任何指针都将受到赞赏。
答案 0 :(得分:0)
这是一个做出一些假设的正则表达式:
>>> 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>')]
但是,严肃地说,如果你发现自己用正则表达式解析XML和非XML的混合,请问问自己:&#34;我是如何到达这里的?&#34;
答案 1 :(得分:0)
我想知道这是不是一个好主意(使用正则表达式),但在这里你去了:
\[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)