python - 多个重叠事件的正则表达式匹配?
问题描述
我的字符串看起来像:
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。我的问题是,如何调整我的正则表达式以达到所需的目的,还有更多比我的方法更干净/有效的方式来编写该正则表达式?谢谢!
解决方案
您可以使用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
推荐阅读
- sql - QueryTable.Refresh 失败时如何获取 SQL 查询错误详细信息
- python - 错误:命令错误退出状态 1:python setup.py egg_info 安装 MySQL-python 时检查
- javascript - 尽管functions.https没有,为什么functions.firestore会出错?
- python - __len__ 不能返回大数字
- php - 更新 GD 版本以支持 PHP 7.3 的 Webp
- internet-explorer - Internet Explorer 在播放 50 个视频后不播放 html 5 个视频
- android - 在 DataWedge 中以编程方式禁用扫描仪
- python-3.x - 如何遍历所有页面以抓取数据(使用 selenium 和 scrapy)并将其保存在 excel 文件中
- python-3.x - 如何在数据名声python中获取最大值的列名?
- php - 如果用户状态为非活动状态,则阻止用户登录