考虑以下字符串(编辑:这不是一个带有正则表达式问题的 HTML 解析。而只是一个命名组的练习):
s = """<T1>
<A1>
lorem ipsum
</A1>
</T1>"""
是否可以使用 re.sub
和命名组将字符串转换为此结果?
<T1>
<test number="1">
lorem ipsum
</test>
</T1>
现在我有以下代码:
import re
regex = re.compile("(<(?P<end>\/*)A(?P<number>\d+)>)")
print regex.sub('<\g<end>test number="\g<number>">', s)
给出以下结果
<T1>
<test number="1">
lorem ipsum
</test number="1">
</T1>
可以像这样使用|
运算符question ?
最佳答案
尝试匹配整个标签。不仅可以捕获开始和结束标签,还可以捕获其内容。
正则表达式:
(<(?P<end>\/*)(A)(?P<number>\d+)>)(.*?)</\3\4>
替换字符串:
<test number="\g<number>">\5</test>
>>> s = """<T1>
<A1>
lorem ipsum
</A1>
</T1>"""
>>> import re
>>> print(re.sub(r'(?s)(<(?P<end>\/*)(A)(?P<number>\d+)>)(.*?)</\3\4>', r'<test number="\g<number>">\5</test>', s))
<T1>
<test number="1">
lorem ipsum
</test>
</T1>
(?s)
称为 DOTALL 修饰符,它匹配正则表达式中的点,甚至可以匹配换行符。
关于python - 正则表达式命名组和条件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28317683/