python 字符串中的中文识别

本文介绍了一个使用Python处理含中文字符的字符串的示例,重点介绍了如何利用translate和findall函数去除字符串中的标点符号和数字。

python的中文问题一直是让人不爽的一件事情,而python的一个强大之处恰恰是string的处理,而且string就难免不包含chinese。所以处理string中的chinese就变得很重要了。

实验室的complex network项目,目前是数据处理阶段,考虑到python的高效和强大的string功能,我决定使用python对大量的数据进行处理。

下面是一个简单的demo,先贴代码,然后进行说明:

python 代码
  1. # -*- coding: gb18030 -*-   
  2. import string  
  3. import re  
  4.   
  5. identify = string.maketrans('', '')   
  6.   
  7. delEStr = string.punctuation + ' ' + string.digits  #ASCII 标点符号,空格和数字   
  8. delCStr = '《》()&%¥#@!{}【】'   
  9.   
  10. s = '中华人民共和国(北京)'   
  11.   
  12. s = s.translate(identify, delEStr) #去掉ASCII 标点符号和空格   
  13. if re.findall('[\x80-\xff].', s):    #s为中文   
  14.    s = s.translate(identify, delCStr)   
  15.    print s   
  16. else#s为英文   
  17.     print s  

当然,首先是要import string和re(这里需要正则表达式功能)。

delEStr是一个包含英文标点符号和数字的字符串,就如 '(){}<>1234 ' 这样。delCStr是一个包含中文标点符号的字符串。s是一个测试字符串。

12行的功能就是把s中的英文标点符号都删除。下面一句是关键:

python 代码
  1. re.findall('[\x80-\xff].', s)  

这行代码将返回一个list,如果s中包含中文,则返回一个包含每个汉字的非空的list,如果s中不包含中文,则返回一个空list(即[ ])。

第14行要删除这个含中文的字符串中的中文标点符号。

运行这段程序,打印出来的是“中华人民共和国北”,“京”呢?不见了。这就是python让人头疼的地方。错误出在第14行,可能原因是“京”的unicode编码和某两个相邻标点的组合编码相同了。我现在还没找到好的解决办法

这段代码最主要的应用就是translate和findall两个函数,不过在使用translate函数之前要构造一个identify,就像第5行代码那样。

出现了问题是好事,它可以促使自己更加深入的去学习,并且现在处于学习阶段,多遇到问题毕竟是好事,继续学习ing....

 

<think>好的,我现在需要回答用户关于Python字符串中如何识别引号的问题。首先,我得回忆一下Python字符串的基本语法。用户可能指的是如何在字符串中包含引号而不引发语法错误,因为引号通常用来界定字符串的开始和结束。 首先,Python中的字符串可以用单引号或双引号括起来,比如'hello'或者"world"。如果字符串内部有单引号,那么用双引号包裹整个字符串可以避免冲突,反之亦然。例如,字符串"It's a nice day"中使用双引号包裹,里面的单引号就不会被识别为字符串的结束符。 接下来,用户可能会问如果字符串内部同时有单引号和双引号怎么办。这时候需要使用转义字符,也就是反斜杠\。比如,'He said, "It\'s raining."',这里的单引号被转义了,而双引号则正常显示。同样,转义双引号的话,可以写成"She said, \"Hello!\"" 还有一种方法是使用三引号('''或""")来创建多行字符串,这种方式允许字符串内部自由使用单引号和双引号,不需要转义,除非需要包含三个连续的同种引号。例如: '''This string contains 'single' quotes and "double" quotes.''' 不过,用户可能还关心其他情况,比如如何动态处理字符串中的引号,或者在编写代码时的最佳实践。比如,当字符串中包含多种引号时,选择合适的外层引号可以减少转义的需要,提高可读性。另外,原始字符串(前缀r)可以处理转义字符,但在引号处理上并没有不同,仍然需要匹配外层引号的类型或使用转义。 还需要注意,转义字符只有在与字符串界定符冲突时才需要。例如,在双引号字符串中,双引号需要转义,但单引号不需要。反之亦然。此外,有时可能需要在字符串中包含反斜杠本身,这时需要使用两个反斜杠\\,但这和引号无关,属于另一个话题。 总结起来,Python识别字符串中的引号主要依赖于以下几点: 1. 使用不同的引号包裹字符串(单引号或双引号)。 2. 使用转义字符\来转义字符串内部的引号。 3. 使用三引号来处理多行字符串和内部包含多种引号的情况。 可能还需要给出一些示例代码,让用户更直观地理解这些方法的应用。例如: 使用不同引号的例子: print("It's a great day!") # 双引号包裹,内部单引号无需转义 print('He said, "Hello!"') # 单引号包裹,内部双引号无需转义 转义字符的例子: print('It\'s a "quote" example.') # 转义单引号 print("She said, \"Hi!\"") # 转义双引号 三引号的例子: print('''This string has 'single' and "double" quotes.''') 需要确保这些例子中的语法正确,并且涵盖了用户可能遇到的问题。同时,提醒用户注意在动态生成字符串或者处理用户输入时,正确转义引号的重要性,以避免语法错误或安全漏洞,比如SQL注入等问题,但后者可能超出当前问题的范围。 最后,检查是否有遗漏的情况,比如三重引号中的转义处理,或者混合使用不同引号时的注意事项。确认所有情况都覆盖到了,并且解释清晰易懂,适合不同水平的Python用户理解。</think>在Python中,字符串的引号识别规则主要通过**引号配对**和**转义字符**来实现。以下是具体方法和示例: --- ### 1. **通过引号类型区分** Python允许使用单引号`'...'`或双引号`"..."`定义字符串。若字符串内部包含某种引号,可用另一种引号包裹: ```python s1 = "It's a cat." # 双引号包裹,内部单引号无需转义 s2 = 'He said "Hi!"' # 单引号包裹,内部双引号无需转义 ``` --- ### 2. **使用转义字符`\`** 若字符串内外部需使用相同类型的引号,可用`\`转义内部引号: ```python s3 = 'It\'s a "pen".' # 单引号包裹,内部单引号需转义 s4 = "She said, \"Wow!\"" # 双引号包裹,内部双引号需转义 ``` --- ### 3. **三引号处理复杂场景** 使用`'''...'''`或`"""..."""`定义多行字符串,内部可自由包含单双引号: ```python s5 = '''This is a string: - It's got 'single quotes'. - And "double quotes"!''' ``` --- ### 4. **原始字符串(避免转义干扰)** 在字符串前加`r`,可保留`\`的原始含义(如处理文件路径时),但对引号转义仍有效: ```python s6 = r"C:\new_folder\" # 反斜杠不转义,但末尾引号需处理 s7 = r"He said \"No\"" # 需转义内部双引号 ``` --- ### 总结表格 | 场景 | 方法 | 示例 | |--------------------|-------------------------------|-------------------------------| | 内部含单引号 | 用双引号包裹字符串 | `"It's easy"` | | 内部含双引号 | 用单引号包裹字符串 | `'Say "Hello"'` | | 内外引号相同 | 用`\`转义内部引号 | `'It\'s a "test"'` | | 多行或混合引号 | 用三引号包裹 | `'''Mix ' and " quotes'''` | | 保留反斜杠字面量 | 字符串前加`r` | `r"C:\path\"` | --- ### 注意事项 - **引号必须成对出现**:未闭合的引号会导致语法错误。 - **优先选择可读性高的方式**:如内部有单引号时,优先用双引号包裹,而非强制转义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值