快速连续汉字

2024-06-26 16:45:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串列表,其中只包含字母和中文字符,寻找一种有效的方法来打开下面的示例 从['江河i河流VNX', 'ws', '上午好d']['江', '河', 'i', '河', '流', 'VNX', 'ws', '上', '午', '好', 'd']

我应该遵循的规则是将连续的汉字分开,并保留连续的字母


Tags: 方法字符串示例列表ws规则字母字符
2条回答

您可以使用中文作为普通字符串遍历字符串。每个字符都可以单独编制索引

此解决方案适用于您的输入案例。这可能不是最有效的方法,但我认为它显示了总体思路

import string
english_chars = list(string.ascii_lowercase)

a = ['江河i河流VNX', 'ws', '上午好d']
b = [] # output list. Creating a separate one for now, but you could figure out a way to override it.

for series in a:
    english_series = ""
    for char in series:
        if char.lower() in english_chars:
            english_series += char

        else:
            if len(english_series) != 0:
                b.append(english_series)
                english_series = ""
             
            b.append(char)
    if len(english_series) != 0:
        b.append(english_series)

如果您只想按拉丁字母表字符对输入中的字符进行分组,并分离出任何不相关的字符,那么使用re.findall([a-zA-Z]+|[^a-zA-Z])模式将实现这一目标。这将查找任意一个或多个拉丁字母,或查找逆集合中的单个字符。例如:

>>> import re
>>> re.findall('([a-zA-Z]+|[^a-zA-Z])', '江河i河流VNX')
['江', '河', 'i', '河', '流', 'VNX']

或者,如果您只想将CJK统一表意文字分离为各自的单个字符,并将其余字符保持为一个序列,请执行相反的操作:

>>> re.findall(r'([\u4E00-\u9FFF]|[^\u4E00-\u9FFF]+)', '江河i河流VNX')
['江', '河', 'i', '河', '流', 'VNX']

related thread对在字符串中查找中文文本进行了更广泛的讨论。在传递给re.findall的模式的范围表达式中,可以包括要分组或不分组的字符的其他范围

对于处理字符串列表,您可能希望将参数作为''.join([<various strings>])应用,并将该字符串传递给相关参数,或者如果输出需要不同,则将字符串的输入列表映射到re.findall(例如,使用列表理解),然后将它们chain放在一起

相关问题 更多 >