我在捕获句子中的特定字符串时遇到了一些麻烦。
我使用的正则表达式是\b[0-9]{9,12}\b
来捕获9到12位数之间的数字。边界我用它来指定确切的数字,但问题是,当我有一个与此正则表达式后跟一个点匹配的数字时,例如,正则表达式仍然匹配并给我带来很多麻烦。
在搜索时,问题是\b
也使用了一些特殊字符作为分隔符,对吧?那么有没有办法考虑,例如 123456789。整个字符串,正则表达式与该示例不匹配?
谢谢!
答案 0 :(得分:2)
单词边界\b
在数字前后需要非单词字符(数字为单词字符)。由于点和逗号是非单词字符,因此允许使用它们。要确保点之间的数字序列不匹配,您需要使用 lookarounds 。
您可以使用
\b(?<!\.)[0-9]{9,12}(?!\.)\b
请参阅regex demo
其他子模式是后视(?<!\.)
和前瞻(?!\.)
,确保在数字序列之前和之后没有.
。
如果您有.
和,
作为小数分隔符,则可能需要将模式调整为
\b(?<![.,])[0-9]{9,12}(?![.,])\b