Python把字符串中汉字和数字分开

在日常的数据处理中,经常会遇到需要将字符串中的汉字和数字分开的情况。例如,我们需要统计一个句子中汉字的个数,或者提取出其中的数字等。在Python中,可以使用正则表达式来实现这个功能。

什么是正则表达式

正则表达式是用来匹配字符串的一种强大的工具。通过使用特殊的字符和语法,可以定义出一种模式,用来描述字符串的特征。在Python中,可以使用re模块来进行正则表达式的操作。

使用正则表达式分割字符串

在我们的场景中,我们希望将一个字符串中的汉字和数字分开。Python中的正则表达式提供了split()函数来实现字符串的分割。下面是一个示例代码:

import re

def split_chinese_and_digits(string):
    pattern = r'[^\u4e00-\u9fa5\d]+'  # 匹配非汉字和数字的字符
    result = re.split(pattern, string)
    return result

在上面的代码中,我们使用了re.split()函数将字符串按照非汉字和数字的字符进行分割,并将结果返回。其中,pattern变量定义了一个正则表达式的模式,用来匹配非汉字和数字的字符。\u4e00-\u9fa5表示汉字的范围,\d表示数字,[]表示匹配其中任意一个字符,+表示匹配前面的字符一个或多个。所以,[^\u4e00-\u9fa5\d]+表示匹配一个或多个非汉字和数字的字符。

接下来,我们可以调用这个函数来进行字符串的分割。例如:

text = "这是一段文本,123456包含汉字和数字987654。"
result = split_chinese_and_digits(text)
print(result)

输出结果为:

['这是一段文本,', '包含汉字和数字', '。']

可以看到,函数成功地将字符串分割成了汉字、数字和其他字符三部分。

统计汉字和数字的数量

除了将汉字和数字分开之外,我们还可以统计它们的数量。Python提供了re.findall()函数来实现正则表达式的匹配。下面是一个示例代码:

import re

def count_chinese_and_digits(string):
    pattern_chinese = r'[\u4e00-\u9fa5]'  # 匹配汉字
    pattern_digits = r'\d'  # 匹配数字
    count_chinese = len(re.findall(pattern_chinese, string))
    count_digits = len(re.findall(pattern_digits, string))
    return count_chinese, count_digits

在上面的代码中,我们使用了re.findall()函数来匹配汉字和数字,并使用len()函数来计算匹配结果的数量。

接下来,我们可以调用这个函数来统计汉字和数字的数量。例如:

text = "这是一段文本,123456包含汉字和数字987654。"
chinese_count, digits_count = count_chinese_and_digits(text)
print("汉字数量:", chinese_count)
print("数字数量:", digits_count)

输出结果为:

汉字数量: 7
数字数量: 12

可以看到,函数成功地统计出了字符串中汉字和数字的数量。

总结

通过使用正则表达式,我们可以很方便地将字符串中的汉字和数字分开,并统计它们的数量。在实际的数据处理中,这个功能非常有用。希望本文能够帮助你更好地理解和应用正则表达式在Python中的用法。