首页 > 解决方案 > 正则表达式替换元素,除非在同一行和匹配之前有另一个匹配

问题描述

我正在做一些工作,重写我公司一些用户的 sql 查询。我们为重写这些查询所做的其中一件事是将.被任何类型的空格包围的 's替换为.被无空格包围的 a(使用简单的正则表达式\s*\.\s*)。

但是,我遇到了一个问题,其中传入的查询包含如下评论:

)
  , wcr AS -- hello I am a comment that ends in a period.
(

然后将其格式化如下,这会使查询失败。

)
  , wcr AS -- hello I am a comment that ends in a period.(

我想不出任何正则表达式可以进行我正在寻找的正确替换 - 也就是说,只有在同一行--之前没有空格的情况下,才将空格包围的句点替换为不被空格包围的句点。.

任何帮助将不胜感激!

标签: pythonregex

解决方案


看起来您想要.替换 a 周围的空格或制表符,但不会认为\n是这样的空格。 \s全部[ \t\n\r\f\v]在 Python 中。

您可以替换[ \t]*\.[ \t]*(两边的零个或多个空格或制表符),只需.


推荐阅读