首页 > 解决方案 > 多个重叠事件的正则表达式匹配?

问题描述

我的字符串看起来像:

sometext 3x 24x5 x 17.5 x 3 sometext

我想将 digit + 可选空间 + x + 可选空间 + digit 的所有实例连接成 digit + x + digit。期望的输出:

sometext 3x24x5x17.5x3 sometext

我当前的正则表达式似乎很好,但不知何故它不起作用:

re.sub(r'(\d)\s?([x])\s?(\d)', r'\1\2\3', 'sometext 3x 24x5 x 17.5 x 3 sometext')

产量

sometext 3x24x5 x 17.5x3 sometext

似乎这与表达式已经捕获了 24x5 的事实有关,因此它不考虑 5 x 17。我的问题是,如何调整我的正则表达式以达到所需的目的,还有更多比我的方法更干净/有效的方式来编写该正则表达式?谢谢!

标签: pythonregex

解决方案


您可以使用re.sub来识别所有 number-x 术语,然后使用回调从每个匹配项中删除所有空格:

inp = "sometext 3x 24x5 x 17.5 x 3 sometext 1 x 2.3 x 4"
output = re.sub(r'\d+(?:\.\d+)?(?:\s*x\s*\d+(?:\.\d+)?)+', lambda m: re.sub(r'\s', '', m.group(0)), inp)
print(output)

这打印:

sometext 3x24x5x17.5x3 sometext 1x2.3x4

推荐阅读