我正在使用Java正则表达式来匹配“部门”。在字符串“ dept。no。2”中,并且不会使用以下正则表达式“ \ b(dept \。)\ b”返回任何匹配项。

我的理解是\ b可以匹配空格,因为它们不是单词字符,但似乎没有这样做。当我按照以下“ \ b(dept \。)\ s * \ b”向正则表达式添加\ s *时,我得到了成功的匹配。

我阅读原始正则表达式的方式是比赛部门。 (带字面量)在字边界之间。这不是正确的读法吗?

我在这里没有/错过什么愚蠢的事情?

最佳答案

\b与以下内容匹配:(^\w|\w\W|\W\w|\w$)

换句话说,在非单词字符(或字符串的开头/结尾)之后的单词字符([a-zA-Z0-9_])。您当前正在尝试使用\.\b匹配“。”;该时间段将匹配,但不跟随单词边界(因为它是两个非单词字符)。

这就是为什么您可以添加\s*并起作用的原因,因为现在单词边界将匹配“ n”之间的空格。我建议您只使用表达式\b(dept\.),因为在您的方案中\.\b几乎是同义词(t是单词字符,然后是\.是非单词字符)。

10-07 19:42
查看更多