如何去掉字符串中不需要的字符

实际案例
  1. 过滤掉用户输入中前后多余的空白字符:”  hello  ”
  2. 过滤某Windows系统下某编辑文件应用在编辑文本时插入的”\r”

解决方案:
- 方法一:字符串strip(),lstrip()和rstrip()方法去掉字符串两端,左边和右边的字符;
- 方法二:删除单个固定位置的字符,可以使用切片+拼接的方式;
- 方法三:字符串的replace()方法或正则表达式re.sub()删除任意位置字符。

# -*- coding: utf-8 -*-

import re

s1 = "     hello    "
# 方法一
print s1.strip()

s2 = "hello\r\n"

# 方法二
print s2[:-2]

# 方法三,replace()
print s2.replace("\r", "")

# 方法三,sub.re()
print re.sub("[\r]", "", s2)

运行结果为:

hello
hello
hello

hello

注:本文实际案例中有一特殊案例,本人在Windows系统和Linux系统下都未成功解决,希望阅读此文的大佬能帮忙解惑,谢谢!

问题为如何去除Unicode中组合字符(音调):’zhào’。

查阅相关教程得知此问题宜采用translate()方法,其代码如下:

u = u'zhào'

print u.translate({0xe0:None})

其输出结果为:

zho

输出结果中‘zhào’的‘à’去除了,但我们本意是去除‘a’的音调。除此之外,本方法有个问题就是需要事先知道Unicode中组合字符的ASCII。对于这个问题,我们可在shell下得知,但若在Python 3.X版本中就无法通过shell得知。

根据北门吹雪(O(∩_∩)O谢谢)的博客可得到Python 3.X版本的解决办法,其代码如下:

import sys
import unicodedata

u = "Zhào"

'''
  通过使用dict.fromkeys() 方法构造一个字典,每个Unicode和音调作为键,对于的值全部为None
  然后使用unicodedata.normalize() 将原始输入标准化为分解形式字符
  sys.maxunicode : 给出最大Unicode代码点的值的整数,即1114111(十六进制的0x10FFFF)。
  unicodedata.combining:将分配给字符chr的规范组合类作为整数返回。 如果未定义组合类,则返回0。
'''
s = unicodedata.normalize('NFD', u)
cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c)))
'''
   调用translate 函数删除所有音调
'''
print(s.translate(cmb_chrs))

运行结果为:

Zhao

Python 2.X的版本的代码如下:

import sys
import unicodedata

u = u'zhào'

s = unicodedata.normalize('NFD', u)
cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(unichr(c)))

print s.translate(cmb_chrs)

运行结果与Python 3.X版本的结果一致。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值