Python中按字符类型拆分字符串的实现及代码异常问题咨询
问题解答
第一个疑问:为什么"!"这类字符被归为ASCII?
其实!本身就是标准ASCII字符呀!ASCII字符集覆盖了0-127范围内的所有字符,其中就包含!、,、?这类常见标点(!对应的ASCII码是33)。你的代码里第一个判断条件是if i.isascii(),只要字符属于ASCII范围,不管是不是标点,都会优先被分到a里。而第二个判断elif i in x根本轮不到!触发,因为它已经被第一个条件“抢”走了。
第二个疑问:空格为什么没被“单独处理”?
空格的ASCII码是32,同样属于ASCII字符集,所以它会被第一个条件i.isascii()匹配,直接分到a里。你看输出的a内容:Tm on testi!!! Toimiiko, mit?,里面的空格其实都保留着——比如Tm和on之间、testi和!!!之间的空格,这些都在a字符串里,只是你可能没特意留意而已。
修正后的代码
要实现你想要的三类划分(ASCII非标点字符、string.punctuation标点、其他字符),得调整判断顺序,先检查是否是标点,再判断是否是其他ASCII字符:
import string osat = "Tämä on testi!!! Toimiiko, mitä?" punctuation = string.punctuation ascii_non_punct = "" punct_chars = "" other_chars = "" for char in osat: if char in punctuation: punct_chars += char elif char.isascii(): ascii_non_punct += char else: other_chars += char print("ASCII非标点字符:", ascii_non_punct) print("标点符号:", punct_chars) print("其他字符:", other_chars)
输出结果:
ASCII非标点字符: Tm on testi Toimiiko mit 标点符号: !!!,? 其他字符: äää
这样就准确把三类字符分开了:
ascii_non_punct包含空格、字母等ASCII非标点字符punct_chars包含所有string.punctuation里的标点other_chars包含那些非ASCII的ä字符
内容的提问来源于stack exchange,提问作者AATU
相关产品推荐
相关产品推荐

