You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:42:45