使用regexp_replace如何不将字符串替换为异常



如何替换除' substation.*'之外的所有' sub.*'

regexp_replace("CleanString",' sub.*',' ', 'ig')

我尝试使用各种分组组合((,但仍然没有得到它。

使用 postgresregexp_replace()

正则表达式通常只匹配存在的东西,而不匹配不存在的东西 - 你不能简单地在那里放一个"if-then-else"。

但是,Postgres的正则表达式支持,此处的手册页包括"前瞻"和"后视"表达式。

在您的情况下,您想要一个*负面的展望":

在没有子字符串匹配重新开始的任何点(?!re)负前瞻匹配(仅限 ARE(

重要的是要注意短语"在任何时候" - 环视是"零宽度",所以(?!station)并不意味着"station以外的东西",它的意思是"字符串中station下一个位置"。

因此,您可以像这样构造查询:

' sub(?!station).*'

这将匹配"sub","foo sub","subbar"或"foo subbar"中的任何一个,但不会匹配"substation","foo变电站","substationbar"或"foosubstationbar"中的任何一个。由于(?!station)宽度为零,而下一个标记是.*,因此在"sub"之后什么都没有

。如果你想在"sub"之后有一些东西,你可以写:

' sub(?!station).+'

.+的意思是"至少一个东西",所以它仍然会匹配"子栏"和"foo subbar",但不再匹配"sub"或"foo sub"。

最新更新