引言
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
同样也可以只删除字母与数字
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)
# , , :
如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论留言!