REGEX 贪婪或语法错误
REGEX greediness or just wrong syntax
我试图从文本中的引号中删除所有 [.!?]
并这样做,我想首先用正则表达式捕获我所有的引号,包括 [.!?]
然后删除它们。
我的正则表达式不起作用,可能是因为它太贪心了。它从我的“«”(索引 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(?!^)|«)([^«».!?]*)[.!?](?=[^«»]*»)", "");
详情
(\G(?!^)|«)
- 第 1 组(其值由替换模式中的 </code> 引用):上一场比赛结束或 <code>«
([^«».!?]*)
- 第 2 组 (</code>):除 <code>«
、»
、!
、.
以外的任何 0+ 个字符和 ?
[.!?]
- 三个符号中的任何一个
(?=[^«»]*»)
- 除了 «
和 »
之外的 0 个或更多字符后必须有一个 »
紧靠当前位置的右侧。
我试图从文本中的引号中删除所有 [.!?]
并这样做,我想首先用正则表达式捕获我所有的引号,包括 [.!?]
然后删除它们。
我的正则表达式不起作用,可能是因为它太贪心了。它从我的“«”(索引 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(?!^)|«)([^«».!?]*)[.!?](?=[^«»]*»)", "");
详情
(\G(?!^)|«)
- 第 1 组(其值由替换模式中的</code> 引用):上一场比赛结束或 <code>«
([^«».!?]*)
- 第 2 组 (</code>):除 <code>«
、»
、!
、.
以外的任何 0+ 个字符和?
[.!?]
- 三个符号中的任何一个(?=[^«»]*»)
- 除了«
和»
之外的 0 个或更多字符后必须有一个»
紧靠当前位置的右侧。