使用一个正则表达式替换字符并将它们包装在标记中

时间:2015-08-31 10:17:55

标签: python regex

我想转换字符串:

  • CPPC<sup>++</sup>
  • CPC<sup>+</sup>
  • CC

目前我使用两个正则表达式执行此操作:

mystring = "CPP"

a = re.sub(r"P", "+", mystring)
b = re.sub(r"(\++)", r"<sup>\1</sup>", a)

print b # C<sup>++</sup>

这有效;但我想用一个正则表达式来做这件事。这可能吗?

2 个答案:

答案 0 :(得分:2)

通过re.sub可以在替换部分使用匿名函数。

>>> def change(s):
    return re.sub(r'\b(C)(P{1,2})\b', lambda m: m.group(1) + ('<sup>++</sup>' if len(m.group(2)) == 2 else  '<sup>+</sup>'), s)

>>> print(change('CPP'))
C<sup>++</sup>
>>> print(change('CP'))
C<sup>+</sup>
>>> print(change('CP'))
C<sup>+</sup>
>>> print(change('C'))
C

答案 1 :(得分:2)

这是一个类似的解决方案:

import re
s = "CPP" # to C<sup>++</sup>
rx = r"(?<=\bC)P+\b"
res = re.sub(rx, (lambda m: "<sup>%s</sup>"%("+" * len(m.group(0)))), s)
print(res)

请参阅IDEONE demo

正则表达式(?<=\bC)P+\b匹配以C开头并以任意数量的P结尾的单词。 "+" * len(m.group(0))允许使用P s替换任意数量的+