正则表达式用于捕获句子中的确切单词

时间:2016-03-14 12:02:13

标签: c# regex

我在捕获句子中的特定字符串时遇到了一些麻烦。

我使用的正则表达式是\b[0-9]{9,12}\b来捕获9到12位数之间的数字。边界我用它来指定确切的数字,但问题是,当我有一个与此正则表达式后跟一个点匹配的数字时,例如,正则表达式仍然匹配并给我带来很多麻烦。

在搜索时,问题是\b也使用了一些特殊字符作为分隔符,对吧?那么有没有办法考虑,例如 123456789。整个字符串,正则表达式与该示例不匹配?

谢谢!

1 个答案:

答案 0 :(得分:2)

单词边界\b在数字前后需要非单词字符(数字为单词字符)。由于点和逗号是非单词字符,因此允许使用它们。要确保点之间的数字序列不匹配,您需要使用 lookarounds

您可以使用

\b(?<!\.)[0-9]{9,12}(?!\.)\b

请参阅regex demo

其他子模式是后视(?<!\.)和前瞻(?!\.),确保在数字序列之前和之后没有.

如果您有.,作为小数分隔符,则可能需要将模式调整为

\b(?<![.,])[0-9]{9,12}(?![.,])\b