我想搜索以 1、2 或 3 位数字开头,然后以空格 和破折号
-
组合继续的表达式。但是,表达式的长度最多必须为 4 个字符,给出以下可能的组合:“123-”、“1-”、“66-”等。我确信问题已经在某处有了答案,但我似乎无法简洁地阐述我的问题以找到任何东西。
简而言之,以下类型的表述是理想的:[0-9]{1,3}[ -]{1,3}{{4}}
其中 4
表示总和不能超过4。
当然,我随时可以输入 [0-9][ -]{3}|[0-9]{2}[ -]{2}|[0-9]{3}[ - ]
,但是,尽管它在这种情况下完成了工作,但列出较长字符集的所有个别情况很快就会变得令人头疼。
最佳答案
您可以使用
String regex = "\\b\\d{1,3}[ -]{1,3}(?<=\\b\\d[\\d -]{3})";
详细信息
-
\b
- 单词边界(如果数字可以粘贴到字母或(?<!\d)
上,则可以替换为_
) -
\d{1,3}
- 1 到 3 位数字 -
[ -]{1,3}
- 1 到 3 个空格或连字符 -
(?<=\\b\\d[\\d -]{3})
- 正向后查找,要求紧邻当前位置的左侧必须有一个数字,然后是 3 个数字、空格或连字符。
查看此Java demo .
String s = "123- 1 - 66 - ";
Pattern pattern = Pattern.compile("\\b\\d{1,3}[ -]{1,3}(?<=\\b\\d[\\d -]{3})");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println("'" + matcher.group(0) + "'");
}
输出:
'123-'
'1 - '
'66 -'
关于python - 正则表达式中多个字符的重复累积和恒定(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53581905/