java - 没有正则表达式形式的连续字符数
问题描述
如何找出没有正则表达式形式的连续字符的数量。例如,我有一个文本“youarenovalid21”,而正则表达式是“(\d+)”,所以我们不能引出最多 14 个字符的内容,因为文本没有数字。所以我想保存文本没有正则表达式形式的字符数为 13。谢谢。
解决方案
要获取正则表达式跳过的文本,请记住初始位置 ( 0
)/上一个正则表达式匹配 ( m.end()
) 之后的下一个位置,然后将其与匹配的开始位置进行比较,如m.start()
.
例子
String input = "youarenovalid21";
Matcher m = Pattern.compile("\\d+").matcher(input);
int start = 0;
while (m.find()) {
if (start < m.start())
System.out.println("Not in regex: " + input.substring(start, m.start()));
System.out.println("In regex: " + m.group());
start = m.end();
}
if (start < input.length())
System.out.println("Not in regex: " + input.substring(start));
输出
Not in regex: youarenovalid
In regex: 21
示例 2
String input = "1a22bb333ccc4444dddd";
输出
In regex: 1
Not in regex: a
In regex: 22
Not in regex: bb
In regex: 333
Not in regex: ccc
In regex: 4444
Not in regex: dddd
或者,您确保正则表达式将始终获取所有内容:
String input = "1a22bb333ccc4444dddd";
for (Matcher m = Pattern.compile("(\\D*)(\\d*)").matcher(input); m.find(); ) {
if (m.start(1) < m.end(1))
System.out.println("Not digits: " + m.group(1));
if (m.start(2) < m.end(2))
System.out.println("Digits: " + m.group(2));
}
输出
Digits: 1
Not digits: a
Digits: 22
Not digits: bb
Digits: 333
Not digits: ccc
Digits: 4444
Not digits: dddd
推荐阅读
- asp.net - 如何在sql参数列表中使用forloop?
- javascript - 如何知道浏览器限制了第 3 方图像的显示?
- flutter - 无法识别样式参数
- python - 在python中识别子和父组合组
- asp.net-core - 如何通过 DI 将经过身份验证的用户 ID 传递给 asp.net 核心中的类库项目?
- git - 无法重写分支:您有未暂存的更改
- php - 将 JSON 数据从视图中的 JavaScript 传递到 laravel 中的控制器
- python - 如何在没有 NumPy 的情况下将矩阵的行转换为 Python 中的列?
- java - 将命名参数传递给方法
- swift - (Q) 如何在 SwiftUI 中使用按钮动作