除' sub.*'
外,如何替换' substation.*'
的所有匹配项?
regexp_replace("CleanString",' sub.*',' ', 'ig')
我尝试过使用各种分组组合()但仍然没有得到它。
使用postgres regexp_replace()
答案 0 :(得分:0)
正则表达式通常只匹配那里的东西,而不是那些不存在的东西 - 你不能简单地放一个" if-then-else"在那里。
然而,Postgres的正则表达式支持,the manual page for which is here包括" lookahead" " lookbehind"表达式。
在您的情况下,您需要*否定前瞻":
(?!re)
负向前瞻匹配任何没有子串匹配重新开始的点(仅限ARE)
在任何时候注意短语"重要的是#34; - lookarounds是"零宽度",所以(?!station)
并不意味着"除了station
"之外的其他东西,它意味着"一个位置在station
未来的字符串中#34;。
因此,您可以构建您的查询:
' sub(?!station).*'
这将匹配" sub"," foo sub"," subbar"或" foo subbar",但不是"变电站"," foo变电站","变电站",或" foo变电站"。由于(?!station)
为零宽度,而下一个标记为.*
,因此在"之后无需进行任何操作。子"
如果你想在" sub"之后有某事,你可以写一下:
' sub(?!station).+'
.+
表示"至少有一个",所以它仍会匹配" subbar"和" foo subbar",但不再匹配"子"或者" foo sub"。