簡體   English   中英

拼寫連續漢字

[英]Sperate consecutive Chinese characters

我有一個僅包含字母和漢字的字符串列表,正在尋找一種有效的方法將以下示例從['江河i河流VNX', 'ws', '上午好d']['江', '河', 'i', '河', '流', 'VNX', 'ws', '上', '午', '好', 'd']

我應該遵循的規則是分隔連續的漢字並保持連續的字母。

您可以像普通字符串一樣遍歷帶有中文的字符串。 每個字符都可以單獨索引。

此解決方案適用於您的輸入案例。 這可能不是最有效的方法,但我認為它顯示了總體思路。

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)

如果您想僅按拉丁字母字符對輸入中的字符進行分組,並分離出任何不相關的字符,請使用帶有模式([a-zA-Z]+|[^a-zA-Z]) re.findall將達到目標。 這將找到任何一個或多個拉丁字母字符,或找到逆集的單個字符。 例子:

>>> 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']

這個相關的線程對在字符串中查找中文文本有更廣泛的討論。 您可以在傳遞給re.findall的模式的范圍表達式中包含您希望分組或不分組的其他字符范圍。

為了處理字符串列表,您可能希望將參數應用為''.join([<various strings>]) ,並將該字符串傳遞給相關參數,或者如果輸出需要不同,則映射輸入字符串列表re.findall (例如,使用列表理解),然后連鎖在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM