如何一致地分割这两个字符串?



这个小代码是用来识别中文单词的。它在大多数情况下都有效,但在某些情况下存在一些问题,第一个单词"𩾃"就是这样一个例子。

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)

输出:

['', '𩾃鱼', ''] ['', '兰蔻', '']

最新更新