gpt4 book ai didi

java - 如何限制正则表达式中的负向前瞻

转载 作者:行者123 更新时间:2023-11-30 05:58:24 26 4
gpt4 key购买 nike

我有一个字符串:

Symphony Veterinary Center                                                           

symphony care veterinary

170 cort 96th St.,
naib, NZ 10025
212-866-8000

We care yours like ours !!

我正在尝试this regex :

((?i)^(?=.*?(?:veterinary|animal[^s]|hospital| care |pets?|clinic)) *(?:[^ \n\r:]+? +?){1,5}$)(?:(?![\s\S]*?(?:(?i)veterinary|animal|hospital|care |pets?|clinic))[\s\S]*?)(\d{2,}[\s\S]+?(?: [A-Z][A-Za-z] (?:\d+-)?\d+))

根据正则表达式,第一组应捕获医院名称,第二组将单独捕获地址。

在这个正则表达式中,我有一个负的前瞻(?![\s\S]*?(?:(?i)veterinary|animal|hospital|care |pets?|clinic)) 在第一组和第二组之间,以确保第一组和第二组之间没有诸如动物、宠物、医院之类的关键字。

但只有当我删除字符串最后一行中的 care 时,它才会匹配。我不知道为什么负向先行检查直到字符串末尾而不是第二组之前?

最佳答案

(?:(?![\s\S]*?(?:(?i)veterinary|animal|hospital|care |pets?|clinic))[\s\S]*?)模式相当麻烦,但似乎您想匹配最左边出现的 veterinary 之前的任何文本, animal , hospital , care , pet , petsclinic .

您需要修复正则表达式的该部分,例如

(?:(?!veterinary|animal|hospital|care\ |pets?|clinic)[\s\S])*?

请参阅regex demo

该模式将匹配任何字符( [\s\S] ),尽可能少地匹配不以 *? 中的字符序列开头的字符( (?!veterinary|animal|hospital|care\ |pets?|clinic) )。负向前瞻。

我还建议格式化模式字符串(如我的演示中所示)并使用 Pattern.COMMENTS修饰符选项(不要忘记转义任何文字空白和 # 字符)。

关于java - 如何限制正则表达式中的负向前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52740087/

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