regex - Posix 正则表达式的负向回溯解决方法
问题描述
如果字符串前面有某个字符,我需要从匹配中排除字符串,并且我的正则表达式引擎是 POSIX。我能够在https://regexr.com/上使用否定的lookbehind 获得所需的结果,但只是发现这在我的 POSIX SnowFlake 平台上不起作用:-(。
我正在尝试标准化公司名称的变体,并希望匹配以“COMPANY”、“CO”或“CO.”结尾的字符串,但如果前面有“&”,则不匹配它们。所以“COMPANY”会在“POWERWASH COMPANY”中匹配,但不会在“JONES & COMPANY”中匹配。
有没有办法在 POSIX 正则表达式中完成这个?我能够使用负面的后视来让它工作,如下所示:
(?<!&)( COMPANY$| CO[.]?$)
解决方案
您可以使用捕获组(正如您已经在做的那样)并将不相关的部分放在组之外:
[^&]( COMPANY| CO\.?)$
演示。
我对 SnowFlake 不太熟悉,但根据文档,您可以使用以下方法提取组 1 捕获的值regexp_substr
:
regexp_substr(input, '[^&]( COMPANY| CO\.?)$', 1, 1, 'e', 1)
-- ^
-- Group number
请注意,[^&]
它将匹配除“&”以外的任何字符。如果即使目标单词位于字符串的开头,您也希望匹配成功,您可以使用(^|[^&])
. [^&]
在这种情况下,您可以从第 2 组而不是第 1 组中提取值。
推荐阅读
- javascript - dts-gen 未创建名称空间问题
- kubernetes - 在 GKE for NGINX Ingress Controller 上自动创建 ClusterRoleBinding
- excel - 如何使带有超链接公式的单元格在粘贴后变为活动状态
- html - 如何使用 VBA 在网站中输入我的用户名
- python - 如何远程访问在 AWS EC2 上运行的 Python 烧瓶应用程序?
- gitlab - 使用 Gitlab API v4 从分支下载目录
- c# - 无法从程序集中加载任务工厂“CodeTaskFactory”,客户端未持有所需的权限
- javascript - 我正在尝试使用 JS 制作更新引擎,但我不知道我做错了什么
- java - 如何在 IntelliJ IDEA 中为 Maven Java 项目禁用 Kotlin 编译器?
- wordpress - 在已经有 Wordpress 主题的主页上添加内容