gpt4 book ai didi

java - REGEX 贪婪或语法错误

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

我尝试从文本中的引号中删除所有 [.!?] ,这样做,我想首先捕获所有引号,包括 [.!?] 之后使用正则表达式删除它们。

我的正则表达式不起作用,可能是因为它太贪婪了。它从我的“«”(索引 569 处的字符)到最后一个字符,即另一个“»”(索引 2730 处的字符)。

我的正则表达式是:

Pattern full=Pattern.compile("«.*[.!?].*?»");

Matcher mFull = full.matcher(result);
while(mFull.find()){
System.out.println(mFull.start()+" "+mFull.end());
}

所以我得到:

569   2731

此外,同样的贪婪问题,捕获句子(以任何 [A-Z] 开头并以任何 [.!?] 结尾。

最佳答案

您可以使用

s = s.replaceAll("(\\G(?!^)|«)([^«».!?]*)[.!?](?=[^«»]*»)", "$1$2");

请参阅regex demo

详细信息

  • (\G(?!^)|«) - 第 1 组(其值由替换模式中的 $1 引用):上一场比赛或 <
  • ([^«».!?]*) - 第 2 组 ($2):除 « 之外的任何 0+ 个字符, »!.?
  • [.!?] - 三个符号中的任何一个
  • (?=[^«»]*») - 除 « 之外的 0 个或多个字符后必须有 »» 紧邻当前位置的右侧。

关于java - REGEX 贪婪或语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56253156/

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