java - 使用正则表达式捕获一组连续数字
问题描述
我正在尝试仅捕获彼此相邻的两个 6,并使用正则表达式获取它发生了多少次,例如如果我们794234879669786694326666976
的答案应该是 2 或者它的 66666 它应该为零等等,我正在使用以下代码并通过它捕获它(66)*
并使用它matcher.groupcount()
来获取它发生了多少次但它不起作用!
package me;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class blah {
public static void main(String[] args) {
// Define regex to find the word 'quick' or 'lazy' or 'dog'
String regex = "(66)*";
String text = "6678793346666786784966";
// Obtain the required matcher
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
int match=0;
int groupCount = matcher.groupCount();
System.out.println("Number of group = " + groupCount);
// Find every match and print it
while (matcher.find()) {
match++;
}
System.out.println("count is "+match);
}
}
解决方案
这里的一种方法是使用环视来确保您只匹配正好两个六的岛屿:
String regex = "(?<!6)66(?!6)";
String text = "6678793346666786784966";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
对于您提供的输入字符串,这会找到两个计数(两个匹配项分别66
位于字符串的开头和结尾)。
正则表达式模式使用两个环视来断言第一个 6 之前和第二个 6 之后的不是其他 6:
(?<!6) assert that what precedes is NOT 6
66 match and consume two 6's
(?!6) assert that what follows is NOT 6
推荐阅读
- android - Flutter:相当于 NSLocale (iOS) & Locale (Android)
- centos - How to set up an additional glibc compiler on centOS
- java - 检查作业是否已经在运行,跳过新的 cron 实例作业
- python - How can I write a function fmap that returns the same type of iterable that was inputted?
- python - 在 Windows 上使用 Python 通过 ssh 连接到 DB 时出错
- razor - 颤振中是否有等效的 Razor View 引擎?
- python - 无法从 pantip.com 提取数据
- python-3.x - 并非所有点都在 Scikit-Optimize 中的空间误差范围内
- azure - 从容器读取时出现问题如何使用此问题文件将数据放入 sql 表中
- java - 如何使用 WalkFileTree 访问文件树中的所有 jar 文件