java - 如何在正则表达式或操作中获取内部组
问题描述
我试图解决一个正则表达式问题,但没有得到解决方案。
String sample1 = "Hello234Water";
String sample2 = "Hello254World";
String pat1 = "Hello(\\d+)World";
String pat2 = "Hello(\\d+)Water";
String pat = "(Hello(\\d+)World|Hello(\\d+)Water)";
Pattern p = Pattern.compile(pat, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(sample1);
if (m.find()) {
String int1 = m.group(1);
System.out.print(int1);
}
预期的反应234
,但得到Hello234Water
编辑1:
我试图解决一个正则表达式问题,但没有得到解决方案。
String sample1 = "Hot234Water";
String sample2 = "Hello254World";
String pat1 = "Hello(\\d+)World";
String pat2 = "Hot(\\d+)Water";
String pat = "(Hello(\\d+)World|Hot(\\d+)Water)";
Pattern p = Pattern.compile(pat, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(sample1);
if (m.find()) {
String int1 = m.group(1);
System.out.print(int1);
}
预期响应234但得到Hot234Water
解决方案
您有不必要的组,还需要在正确的位置使用交替:
String pat = "Hello(\\d+)(?:World|Water)";
Pattern p = Pattern.compile(pat, Pattern.CASE_INSENSITIVE);
此外,您不需要DOTALL
模式,因为您没有使用.
(DOT) 跨换行符匹配任何内容。
fyi(?:...)
称为非捕获组。
对于您编辑的问题,您可以使用此正则表达式:
final String pat = "^(?=Hello\\d+World$|Hot\\d+Water$)\\D+(\\d+)";
推荐阅读
- dynamics-crm - ExecuteTransactionRequest ODATA 查询
- mongodb - MongoDB:并发事务失败
- javascript - React 访问文件数据
- xml - 验证 XSD 失败 - 未声明属性
- c - 使用 make 命令构建项目时出错,使用未声明的标识符“__compar_fn_t”
- numpy - 如何让 scipy.stats.truncnorm.rvs 使用 numpy.random.default_rng()?
- html - 复制电子邮件签名的正确方法是什么以及为什么电子邮件签名与从电子邮件客户端发送的签名不同
- android - 替换 Flutter 库中的 gradle 依赖项
- python - Python re 中注释的正则表达式
- javascript - 在 Node 和 React 中获取请求以检查登录信息