Python3 中 ASCII 和 Unicode 字母之间的单词边界

Word boundary between ASCII and Unicode letters in Python3

Python3:

import re
k = "X"
s = "X测试一Q测试二XQ测试三"
print(re.split((r"\b" + k + r"\b"), s))

输出:

['X测试一Q测试二XQ测试三']

预计:

['', '测试一Q测试二XQ测试三']

属于\p{Lo} is a letterclass并且X之间没有分界线。

\b 字边界构造在 Python 3.x re 模式中默认为 Unicode-aware,因此您可以使用re.ASCII / re.A option,或内联 (?a) 标志:

import re
k = "X"
print( re.split(fr"(?a)\b{k}\b", "X测试一Q测试二XQ测试三") )

参见regex demo and the Python demo

如果您需要确保X前后没有ASCII字母,请使用(?<![a-zA-Z])X(?![a-zA-Z])。或者,包括数字,(?<![a-zA-Z0-9])X(?![a-zA-Z0-9]).