python—如何删除(保留)字符串中除字母、数字外的其他元素

引言

  leetcode刷题中碰到了如下问题:
在这里插入图片描述
在一个含有","":"等字符的字符串中只考虑字母与数字字符,那么理所当然需要只保留字母与数字字符,其他的删除

1.使用re.sub()函数

更多正则化知识见这个网址
  Python 的re模块提供了re.sub用于替换字符串中的匹配项
语法:

re.sub(pattern, repl, string, count=0, flags=0)

参数:

pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags : 编译时用的匹配模式,数字形式。
前三个为必选参数,后两个为可选参数。

import re

s = "A man, a plan, a canal: Panama"
s = s.lower()
result = re.sub('[\W_]+', '', s)
print(result)
# amanaplanacanalpanama

是不是很神奇?
它利用了正则表达式模式语法中的特殊元素。

[…] 用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’
[^…] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0个或多个的表达式。
re+ 匹配1个或多个的表达式。
re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
\w 匹配数字字母下划线
\W 匹配非数字字母下划线

所以,[\W_]+代表着匹配一个或多个非数字字母,
如果,我们将[\W_]+变成[\w_]+,那么就代表着匹配一个或多个数字字母

import re

s = "A man, a plan, a canal: Panama"
s = s.lower()
result = re.sub('[\w_]+', '', s)
print(result)
#  ,  ,  : 

2.isalpha()+isnumeric()+join()

  该方法利用了字符串的内置方法isalpha(),isnumeric(),通过迭代字符串中的每一个元素并结合join方法(join()方法用于将序列中的元素以指定的字符连接生成一个新的字符串)。

s = "A man, a plan, a canal: Panama"
s = s.lower()
# 去掉除字符串与数字外的其他
s = [i for i in s if i.isalpha() or i.isnumeric()]
s = "".join(s)
print(s)
#  amanaplanacanalpanama

同样也可以只删除字母与数字

扫描二维码关注公众号,回复: 12708092 查看本文章
s = "A man, a plan, a canal: Panama"
s = s.lower()
# 去掉除字符串与数字外的其他
s = [i for i in s if not i.isalpha() and not i.isnumeric()]
s = "".join(s)
print(s)
#   ,  ,  : 

猜你喜欢

转载自blog.csdn.net/weixin_46649052/article/details/114441811