[英]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.