13. 去除字符串中不需要的字符

要求:

  1. 过滤掉用户输入中前后多余的空白字符:
'  nick2008@gmail.com  '
  1. 过滤Windows下编辑文本中的\r\n
'hello world\r\n'
  1. 去掉文本中的Unicode组合符号(音调):
'nǐ hǎo,shì jiè'

解决方案:

  1. 字符串的strip()lstrip()rstrip()方法去掉字符串两端的字符;

  2. 删除单个固定位置的字符,可以使用split()方法先切片后拼接的方式;

  3. 字符串的replace()方法或正则表达式re.sub()删除任意子串(令要替换的内容为'');

  4. 使用unicodedata.normalize()方法,可以删除Unicode字符串。


  • 对于strip()方法:

字符串的strip()方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列,返回一个列表。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

类似的,lstrip()方法用于截掉字符串左边的空格或指定字符;rstrip()方法用于截掉字符串右边的空格或指定字符。

  • 对于replace()方法:
replace(old, new, count)

字符串的replace()方法把字符串中的old(旧字符串)替换成new(新字符串),count表示要替换的最大次数。

  • 对于unicodedata.normalize()方法:
unicodedata.normalize(form, unistr)

返回Unicode字符串unistr的正常形式form。 form的有效值为NFCNFKCNFDNFKD


  • 方案1示例:
s1 = '  nick2008@gmail.com  '
s2 = '+-===nick2008@gmail.com===-+'
s3 = '+-=  nick2008@gmail.com  =-+'
s4 = '  +-=  nick2008@gmail.com  =-+  '
print(s1.strip())
print(s2.strip('+-='))
print(s3.strip('+-= '))
print(s4.strip('+-= '))

nick2008@gmail.com              #结果
nick2008@gmail.com
nick2008@gmail.com
nick2008@gmail.com

  • 方案2示例:
from functools import reduce

s = '    abc:1234+sbd-    ewq=grw\r\n  '

def my_split(s, seps):
    res = reduce(lambda t, sep: sum(map(lambda ss: ss.split(sep), t), []), seps, [s])
    return res

answer = ''

for i in my_split(s,':+-=\r\n '):
    answer += i

print(answer)

abc1234sbdewqgrw                #结果

字符串的split()方法指定分隔符对字符串进行切片,自定义函数my_split()可将字符串中不需要的任意字符去除。


  • 方案3示例:

使用replace()方法:

from functools import reduce

s = '    abc:1234+sbd-    ewq=grw\r\n  '

def my_replace(s, seps):
    res = reduce(lambda t, sep: t.replace(sep, ''), seps, s)
    return res

answer = my_replace(s, ' :+-=\r\n')
print(answer)

abc1234sbdewqgrw                #结果

使用replace()方法比使用split()方法简单,这是因为replace()方法返回的结果是字符串,而split()方法返回的结果是列表。

使用正则表达式re.sub()

import re
from functools import reduce

s = '    abc:1234+sbd-    ewq=grw\r\n  '

def my_rub(s, seps):
    res = reduce(lambda t,sep: re.sub(r'[%s]+' % sep, '', t), seps, s)
    return res

answer = my_rub(s, ' :+-=\r\n')
print(answer)

abc1234sbdewqgrw                #结果

  • 方案4示例:
import unicodedata

s = 'ní hǎo, shì jiè'

answer = unicodedata.normalize('NFKD', s).encode('ascii','ignore')
print(str(answer).replace('b', ''))

'ni hao, shi jie'               #结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值