Java regexp:仅匹配指定符号内的单独数字
我在java中使用正则表达式,不知道如何只匹配预定义符号中的数字 下面是我的一个字符串的示例:Java regexp:仅匹配指定符号内的单独数字,java,regex,Java,Regex,我在java中使用正则表达式,不知道如何只匹配预定义符号中的数字 下面是我的一个字符串的示例: some text [1] some and numbers 12, 14 and more text [11,1] another text [3,6, 7] and some more text [5;16] 真的可以只检索方括号中的数字吗?在这种情况下:1113677516 这不应与方括号中的任何其他符号相匹配 我已经尝试了几种选择,包括: Pattern k = Pattern.compil
some text [1] some and numbers 12, 14 and more text [11,1] another text [3,6, 7] and some more text [5;16]
真的可以只检索方括号中的数字吗?在这种情况下:1113677516
这不应与方括号中的任何其他符号相匹配
我已经尝试了几种选择,包括:
Pattern k = Pattern.compile("\\[(\\d+)\\]");
但这只为一个数字而不是其他数字提供了工作。我试着把它们分组,比如(?:\\[)里面的一些代码(?:\\])
,但没有成功
更新
分组解决方案:
Pattern k=Pattern.compile(\\[(\\d+)(:)?(\\d+)\])代码>
但是产生括号和逗号作为输出。您可以选择这些数字,您可以使用以下正则表达式:
(?:\G|\[)[,;\s]*(\d+)
它只选择数字
解释
(?:\G | \[)
匹配上一个匹配的结束位置或一个开口括号
[,;\s]*
匹配逗号、分号或空格零或多次
(\d+)
捕获数字
您将拥有组1中的数字。您可以选择这些数字,您可以使用以下正则表达式:
(?:\G|\[)[,;\s]*(\d+)
它只选择数字
解释
(?:\G | \[)
匹配上一个匹配的结束位置或一个开口括号
[,;\s]*
匹配逗号、分号或空格零或多次
(\d+)
捕获数字
您将在第1组中列出这些数字。只是为了提供一种不同的解决方法,当问题变得更加复杂时,这种方法可能会派上用场:
实现目标的一个更简单的方法是将匹配分为两个阶段
Pattern areas = Pattern.compile("\\[.*?\\]");
这将导致[1]
[11,1]
[3,6,7]
[5;16]
那么,对于任何一种情况,请使用
Pattern numbers = Pattern.compile("\d+");
与实际数字相匹配。只是为了提供一种不同的解决方法,当它变得更加复杂时可能会派上用场:
实现目标的一个更简单的方法是将匹配分为两个阶段
Pattern areas = Pattern.compile("\\[.*?\\]");
这将导致[1]
[11,1]
[3,6,7]
[5;16]
那么,对于任何一种情况,请使用
Pattern numbers = Pattern.compile("\d+");
以匹配实际数字。可能这一个会对您有所帮助
试试看:
Pattern k = Pattern.compile("\\[(\\d+)(;?)(\\d+)\\]");
也许这个能帮你
试试看:
Pattern k = Pattern.compile("\\[(\\d+)(;?)(\\d+)\\]");
是[3,6,7]
还是[3,6,7]
?是[3,6,7]
还是[3,6,7]
?嗯,\G和\K在Java中使用模式类吗?试过:(?:G\\\[)[,;\\s]*K\\d+
和with\\G\\K\G
应该可以,但是\K
没有包含在中。但是没有明确检查它。你是对的,它不受支持。我已经更新了我的答案。cc@vitaliMatcher.group(1)只给出了数字。完美。嗯,\G和\K在Java中使用模式类吗?尝试过:(?:G\\\\\[)[,;\\s]*K\\d+
和with\\G\\K\G
应该可以,但是\K
没有包含在中。但是没有明确检查它。你是对的,它不受支持。我已经更新了我的答案。cc@Vitaliymatcher.group(1)只给出了数字。非常好。