我试图删除文本引号中的所有[.!?]
,因此,我想首先用正则表达式捕获所有包含[.!?]
的引号,然后再将其删除。
我的正则表达式不起作用,可能是因为它很贪婪。从我的“«”(索引号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]开头并以任何[。!?]结尾。
答案 0 :(得分:1)
您可以使用
s = s.replaceAll("(\\G(?!^)|«)([^«».!?]*)[.!?](?=[^«»]*»)", "$1$2");
请参见regex demo
详细信息
(\G(?!^)|«)
-第1组(其值在替换模式中用$1
引用):上一场比赛的结束或«
([^«».!?]*)
-第2组($2
):除«
,»
,!
,.
和{ {1}} ?
-三个符号中的任何一个[.!?]
-当前位置右边的(?=[^«»]*»)
和»
之外的0个或多个字符之后必须有一个«
。