python - 正则表达式命名组和条件逻辑

标签 python regex

考虑以下字符串(编辑:这不是一个带有正则表达式问题的 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>

DEMO

>>> 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/

相关文章:

python - 无法打开 C :\Python27\Scripts\pip-scripts. py

python - Pandas:如何在不重复项目轴的情况下连接两个面板(即像数据帧中的列)?

python - 使用 Python 3.4 和 BeautifulSoup 、Requests 抓取文章

python - python中的正则表达式技巧

java - java回文错误

python - 如何从 10,000 个 Python 列表中高效地挑选第 i 项并高效地将它们变成一个列表?

python - 减少超出范围的数组

javascript - 如何在使用正则表达式的 react 中限制和重置 &lt;input type ="number"/>?

r - 计算小数点和第一个非零数字之间的前导零

php - REGEX 匹配除/以 : 开头的所有内容