如何在特殊字符周围使用 \b 边界

Leo*_*ick 2 python regex

\\b\xe2\x9c\x85\\b匹配单个表情符号:\'\xe2\x9c\x85\'。

\n

\\b\\u2B07\\b匹配:\'\xe2\xac\x87\xef\xb8\x8f\'。

\n

\\b-\\b\'-\' 不匹配

\n

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

\n

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

\n

游乐场: https: //regex101.com/r/jRaQuJ/2

\n

ggo*_*len 6

您可以使用该模式:

\n
(?<!\\w)\xe2\x9c\x85(?!\\w) \n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n

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

\n
(?<!\\w)\xe2\x9c\x85(?!\\w) \n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n

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

\n