我有一个字符串:
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))
否定,以确保第一和第二组之间没有动物,宠物,医院等关键字出现。 / p>
但是仅当我删除字符串的最后一行中的care
时,它才匹配。我不知道为什么负前瞻会一直检查到字符串末尾而不是第二组之前?
答案 0 :(得分:1)
Expandable List
模式非常麻烦,但是您似乎想匹配任何文本,直到最左边出现的(?:(?![\s\S]*?(?:(?i)veterinary|animal|hospital|care |pets?|clinic))[\s\S]*?)
,veterinary
,animal
,{{1 }},hospital
,care
或pet
。
您需要修复正则表达式的一部分,例如
pets
请参见regex demo
该模式将匹配任何不会以clinic
负向超前开始字符序列的字符((?:(?!veterinary|animal|hospital|care\ |pets?|clinic)[\s\S])*?
),并尽可能少地匹配([\s\S]
)。
我还建议格式化模式字符串(如我的演示中所示),并使用*?
修饰符选项(不要忘了转义任何文字空白和(?!veterinary|animal|hospital|care\ |pets?|clinic)
字符)。