gpt4 book ai didi

regex - 贪婪的正则表达式与 postgresql 不兼容? (子串匹配)

转载 作者:行者123 更新时间:2023-11-29 12:16:00 24 4
gpt4 key购买 nike

我试图制作一个正则表达式来使用 SUBSTRING 函数提取一些信息,但是我在 https://regex101.com/r/cFy11t/1 上尝试过的正则表达式在 postgresql 上返回错误:“量词操作数无效”

此子字符串的目标是提取字符串中的最后一个数字,如果数字类似于“街道 X 的 12B”,则将补码包括为“A、B...G 或 BIS、TER”。如果字符串中有多个数字,它应该选择最后一个,除非最后一个在字符串的末尾。

例如在字符串“123 47F ABC 33 BIS”中,结果应该是“47F”

我已经更改了很多代码,因为我没有得到预期的输出,但我只得到一个错误,因为我强制使用贪婪量词“++”和“?+”来获取字母,如果可能的

所以这是我的代码的最后一个版本,其中 postgres 引发了一个错误:(但你可以点击链接向上查看它的颜色,它可能更清楚)

SELECT SUBSTRING(Adresse, '(\d++((?:\s)?([A-G]|BIS|TER|QUARTER)?+\s)(?!$))(?!(.*\d+(\s)?[A-G]?+\D))')  Numero,

...

感谢您的宝贵时间!

最佳答案

你可以使用

'^.*\y(\d+(?!\s?(?:BIS|TER|QUARTER|[A-G])$)\s?(?:BIS|TER|QUARTER|[A-G])?\y)'

参见 online demo

要点是去掉所有格量词,并确保在考虑到尾随模式是可选的情况下应用字符串结尾检查。

详情

  • ^ - 字符串的开始
  • .*\y - 任何 0+ 个字符,尽可能多,直到最后一个单词边界(后跟...)
  • (\d+(?!\s?(?:BIS|TER|QUARTER|[A-G])$)\s?(?:BIS|TER|QUARTER|[A-G])?\y) - 第 1 组(这将由 SUBSTRING 返回):
    • \d+ - 1+ 位
    • (?!\s?(?:BIS|TER|QUARTER|[A-G])$) - 后面没有可选的空格,然后是 BIS,或者TERQUARTER 或字符串末尾从 AG 的字母
    • \s? - 一个可选的空格
    • (?:BIS|TER|QUARTER|[A-G])? - BISTER 的可选匹配项,或 QUARTER 或从 AG
    • 的字母
    • \y - 单词边界。

关于regex - 贪婪的正则表达式与 postgresql 不兼容? (子串匹配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54023756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com