我在java中使用正则表达式,无法弄清楚如何只匹配预定义符号中的数字。
这是我的一个字符串的示例:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[applic/model/version/@version='ABCD']" />
</xsl:stylesheet>
是否真的可以只检索方括号中的数字?在这种情况下:1 11 1 3 6 7 5 16 这不应与方括号中的任何其他符号匹配。
我已经尝试了几个选项,包括:
some text [1] some and numbers 12, 14 and more text [11,1] another text [3,6, 7] and some more text [5;16]
但这仅适用于一个数字而非其他数字。我试图将它们分组,例如Pattern k = Pattern.compile("\\[(\\d+)\\]");
没有任何成功。
更新
分组的解决方法:
(?:\\[) some code inside (?:\\])
但是生成括号和逗号作为输出。
答案 0 :(得分:3)
您可以选择这些数字,您可以使用以下正则表达式:
(?:\G|\[)[,;\s]*(\d+)
它只选择数字。
(?:\G|\[)
匹配上一场比赛的结束位置或一个左括号[,;\s]*
匹配逗号,分号或空格零或多次(\d+)
捕获数字您将拥有第1组中的数字。
答案 1 :(得分:1)
只是提供一种不同的解决方法,当它变得更加复杂时可能会派上用场:
实现目标的一种更简单的方法是将匹配分为两个阶段。首先,将括号的出现与
匹配Pattern areas = Pattern.compile("\\[.*?\\]");
将导致[1]
[11,1]
[3,6, 7]
[5;16]
。
然后对于其中任何一个使用像
这样的东西Pattern numbers = Pattern.compile("\d+");
匹配实际数字。
答案 2 :(得分:0)
可能这个会帮助你。
试一试:
Pattern k = Pattern.compile("\\[(\\d+)(;?)(\\d+)\\]");