例如,我有很多产品尺寸的文本,如“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 '
码:
>>> 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'