如何替换所有出现的正则表达式,就像重复应用替换一样

前端之家收集整理的这篇文章主要介绍了如何替换所有出现的正则表达式,就像重复应用替换一样前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
例如,我有很多产品尺寸的文本,如“2×4”,我想将其转换为“2 xby 4”.

pattern = r"([0-9])\s*[xX\*]\s*([0-9])"

re.sub(pattern,r"\1 xby \2","2x4")
'2 xby 4' # good

re.sub(pattern,"2x4x12")
'2 xby 4x12' # not good. need this to be '2 xby 4 xby 12'

描述我想要做的事情的一种方法是重复替换,直到不能再进行替换.例如,我可以简单地对上面的替换进行两次以获得我想要的东西

x = re.sub(pattern,"2x4x12")
x = re.sub(pattern,x)
'2 xby 4 xby 12'

但我认为有更好的方法

解决方法

您可以使用此前瞻性正则表达式进行搜索

r'([0-9]+)\s*[xX*]\s*(?=[0-9]+)'

(?= [0-9])是正向前瞻,只是通过向前看来断言存在第二个数字,但是不通过匹配数字来移动内部正则表达式指针.

并使用此替换:

r'\1 xby '

RegEx Demo

码:

>>> pattern = r'([0-9]+)\s*[xX*]\s*(?=[0-9]+)'

>>> re.sub(pattern,r'\1 xby ',"2x4")
'2 xby 4'

>>> re.sub(pattern,"2x4x12")
'2 xby 4 xby 12'

猜你在找的正则表达式相关文章