java - 正则表达式贪婪或语法错误
问题描述
我试图删除[.!?]
文本中的所有引号并这样做,我想首先捕获我的所有引号,包括[.!?]
使用正则表达式在之后删除它们。
我的正则表达式不起作用,可能是因为它很贪婪。它从我的“«”(索引 569 处的字符)到最后一个字符,即另一个“»”(索引 2730 处的字符)。
我的正则表达式是:
Pattern full=Pattern.compile("«.*[.!?].*?»");
Matcher mFull = full.matcher(result);
while(mFull.find()){
System.out.println(mFull.start()+" "+mFull.end());
}
所以我得到了:
569 2731
此外,同样的贪婪问题,捕捉句子(以任何 [AZ] 开头并以任何 [.!?] 结尾。
解决方案
您可以使用
s = s.replaceAll("(\\G(?!^)|«)([^«».!?]*)[.!?](?=[^«»]*»)", "$1$2");
查看正则表达式演示
细节
(\G(?!^)|«)
- 第 1 组(其值$1
从替换模式中引用):前一个匹配的结束或«
([^«».!?]*)
- 第 2 组 ( ):除、、和之外的$2
任何 0+ 个字符«
»
!
.
?
[.!?]
- 三个符号中的任何一个(?=[^«»]*»)
- 除了当前位置的右侧之外,必须有»
0 个或多个字符之后。«
»
推荐阅读
- django - 尝试使用模型上传音频文件,但出现“未找到”错误(Django)
- android - 在后台运行 BLE ScanCallback
- python - IP地址字符串提取在Python3中不起作用
- c++ - 为什么不总是使用 ::operator new 而不是 new (甚至不构造)?
- swagger - 招摇加豹猫
- python - 如何在 pandas 的数据透视表函数中聚合索引值?
- discord.py - 如何检查此人是否已经在不和谐中使用过命令?
- typescript - 打字稿使用泛型使用类型键参数从接口获取类型值?
- python - 用不断变化的字符串值填充数组
- python - 如何在python中获取正确的日期而不是系统日期