gpt4 book ai didi

Java 负向前瞻排除单词

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

我正在用 Java 编写正则表达式来匹配姓名,但想要排除包含某些单词的行的匹配项:“Deputy Clerk”或“Electronic Recording”(不区分大小写)。

这是我的正则表达式:

(?i)(?:(?:Hon(?:orable)?|Judge)[:. ]+)+(?-i)([A-Z][A-Za-z. '-]{5,}(?i)(?:,? +[JS]R +\.)?)(?!Deputy Clerk|Electronic Recording)

我打算让它仅匹配以下 3 行中的第一行,但目前它正在返回所有 3 行的匹配项。

Hon. Judge: Amy D. Hogue
HONORABLE Lesley Briones Jr. JUDGE DEPUTY CLERK
HONORABLE JUDGE PRO TEM ELECTRONIC RECORDING MONITOR

我的负面预测有什么问题吗? https://regexr.com/4o3sr

最佳答案

您尝试失败的单词被捕获到组 1 中,其模式会抓取包含这些单词的文本,并且由于没有明确的边界,也没有组模式调节,因此前瞻返回 true,因为它没有找到禁用的短语在当前索引的字符串位置。

您可以使用

(?i)(?:(?:Hon(?:orable)?|Judge)[:. ]+)++(?!.*(?:Deputy Clerk|Electronic Recording))((?-i:[A-Z])[A-Za-z. '-]{5,}(?:,? +[JS]R +\.)?)

请参阅regex demo

只有在被禁止的短语是整个单词时才会失败,请添加单词边界:

(?i)(?:(?:Hon(?:orable)?|Judge)[:. ]+)++(?!.*\b(?:Deputy Clerk|Electronic Recording)\b)((?-i:[A-Z])[A-Za-z. '-]{5,}(?:,? +[JS]R +\.)?)

请注意,如果您使用修饰符组,您可能会删除第二个 (?i):(?-i:[A-Z])

一旦 (?!.*\b(?:Deputy Clerk|Electronic Recording)\b) 放置在 (?:(?:Hon(?:orable)?|判断)[:.]+)++,如果右侧任意位置有非捕获组中的替代者之一,则匹配失败。

此外,我建议在 (?:(?:Hon(?:orable)?|Judge)[:. ]+) 之后使用所有格量词来更快地匹配和失败无效字符串。

关于Java 负向前瞻排除单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58689460/

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