这个小代码是用来识别中文单词的。它在大多数情况下都有效,但在某些情况下存在一些问题,第一个单词"𩾃"就是这样一个例子。
re_default = re.compile("([u4E00-u9FD5a-zA-Z0-9+#&._%-]+)", re.U)
words1 = re_default.split('𩾃鱼')
words2 = re_default.split('兰蔻')
输出为:
['𩾃', '鱼', ''] ['', '兰蔻', '']
第一个单词'𩾃. cn '似乎不在定义的代码范围内。我想把它和' '一样分开。如何找到正确的范围,并在正则表达式容纳它?
正如评论中提到的,您只指定了中文字符的一个范围。
您可以使用8位的Unicode转义来指定更高的CJK范围。这些范围列在Unicode 14.0字符代码图中。下面包括所有CJK统一表意文字扩展:
import re
CJK = ('u4E00-u9FFF' # CJK Unified Ideographs
'u3400-u4DBF' # CJK Unified Ideographs Extension A
'U00020000-U0002A6DF' # CJK Unified Ideographs Extension B
'U0002A700-U0002B73F' # CJK Unified Ideographs Extension C
'U0002B740-U0002B81F' # CJK Unified Ideographs Extension D
'U0002B820-U0002CEAF' # CJK Unified Ideographs Extension E
'U0002CEB0-U0002EBEF' # CJK Unified Ideographs Extension F
'U00030000-U0003134F') # CJK Unified Ideographs Extension G
re_default = re.compile(rf'([{CJK}a-zA-Z0-9+#&._%-]+)')
words1 = re_default.split('𩾃鱼')
words2 = re_default.split('兰蔻')
print(words1,words2)
输出:
['', '𩾃鱼', ''] ['', '兰蔻', '']