Python使用re正则表达式分割中英文混合字符串
本文介绍如何利用Python的re模块正则表达式,精准分割包含中英文、数字及标点符号的混合字符串。通过定义特定的Unicode范围匹配中文与英文单词,实现按字或按词拆分,并提供完整代码示例与结果分析。
核心原理:利用Unicode范围匹配
在Python中处理中英文混合文本时,核心在于利用正则表达式识别不同字符的Unicode编码范围。以下是常用的匹配规则:
\u4e00-\u9fa5:匹配所有中文字符。\u0030-\u0039:匹配数字。\u0041-\u5a:匹配大写字母。\u0061-\u007a:匹配小写字母。
基础示例:提取中英文
若目标是将字符串中的中文和英文分别提取出来,可以使用 re.findall() 函数。该函数会返回所有匹配的子串列表。
import re
s = 'alibaba阿里巴巴' # 待分割字符串
en_letter = '[\u0041-\u5a|\u0061-\u007a]+' # 大小写英文字母
zh_char = '[\u4e00-\u9fa5]+' # 中文字符
print(re.findall(zh_char,s) + re.findall(en_letter,s))
# 输出: ['阿里巴巴', 'alibaba']上述代码首先匹配所有中文字符,再匹配所有英文单词,最后将两个列表合并。这种方法简单直接,适用于只需提取内容而无需保留标点符号的场景。
进阶处理:复杂混合字符串分割
在实际应用中,待切分的句子往往包含中英文、数字以及标点符号。我们需要一种更复杂的逻辑,使得中文按字断开,英文按单词分开,而数字和标点符号则作为分隔符处理。
实现步骤
- 定义正则规则:使用
re.compile()编译正则表达式。这里使用[\W]*匹配除单词字符(字母、数字、下划线)和中文外的任意字符串,作为分割依据。 - 处理中文:针对中文部分,使用
r"([\u4e00-\u9fa5])"进行匹配。注意,中文通常按字分割,因此需要将中文单字单独提取。 - 遍历与过滤:遍历分割后的结果,去除空字符串,最终得到纯净的词列表。
完整代码示例
import re
def get_word_list(s1):
# 把句子按字分开,中文按字分,英文按单词,数字按空格
regEx = re.compile('[\\W]*') # 我们可以使用正则表达式来切分句子,切分的规则是除单词,数字外的任意字符串
res = re.compile(r"([\u4e00-\u9fa5])") # [\u4e00-\u9fa5]中文范围
p1 = regEx.split(s1.lower())
str1_list = []
for str in p1:
if res.split(str) == None:
str1_list.append(str)
else:
ret = res.split(str)
for ch in ret:
str1_list.append(ch)
list_word1 = [w for w in str1_list if len(w.strip()) > 0] # 去掉为空的字符
return list_word1
if __name__ == '__main__':
s = "12、China's Legend Holdings will split its several business arms to go public on stock markets, the group's president Zhu Linan said on Tuesday.该集团总裁朱利安周二表示,haha中国联想控股将分拆其多个业务部门在股市上市。"
list_word1=get_word_list(s)
print(list_word1)结果分析
运行上述代码,处理包含中英文及标点符号的长句时,切分结果列表将包含数字、英文单词和单字。例如,输入字符串中的“China's”会被识别为英文单词,“中国”会被拆分为“中”和“国”,而标点符号如“、”和“。”则被过滤掉。这种方法能够灵活应对复杂的文本处理需求。
以上就是Python通过re正则表达式切割中英文混合字符串的详细内容,更多关于Python字符串处理与正则表达式应用资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













