首页 > 解决方案 > 如何在特殊字符周围使用 \b 边界

问题描述

\b✅\b不匹配单个表情符号:'✅'

\b\u2B07\b不匹配:'⬇️'

\b-\b匹配'-'。

\bfoo\b当然匹配'foo'。

为什么会发生这种情况以及确保我的表情符号或任何特殊字符不在字符串中间的替代方法

操场:https ://regex101.com/r/jRaQuJ/2

标签: pythonregex

解决方案


您可以使用以下模式:

(?<!\w)✅(?!\w) 

这使用否定环视来匹配两侧没有单词字符的表情符号。

您询问的匹配的原因\b是零宽度边界,其中边界的一侧是\w(单词字符或[0-9A-Za-z_]),另一侧是字符串的开头或结尾或\W(非单词字符)。

例如,考虑字符串"foo."

start of string boundary (zero width)
     |
     |   non-word character
     |   |
     v   v
      foo.
      ^ ^
      | |
word characters

由于和字符之间的边界以及字符串开头和字符之间的边界,\b边界可以在正则表达式中使用\bfoo\b并找到匹配项。o.f

"foobar"不匹配\bfoo\b,因为第二个o并且b不满足边界条件,即b不是非单词字符或字符串结尾。

该模式\b-\b与字符串不匹配,"-"因为"-"不是单词字符。同样,表情符号是由非单词字符构建的,因此它们不会像单词字符那样响应边界,就像\bfoo\b.


推荐阅读