如何替换除' 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"。