Python - 使用正则表达式筛选数据

5 投票
5 回答
17163 浏览
提问于 2025-04-15 13:38

有没有简单的方法可以从一个字符串中去掉所有符合某个规则的字符?我知道在Ruby里可以用 gsub 来做到这一点:

>> key = "cd baz ; ls -l"
=> "cd baz ; ls -l"
>> newkey = key.gsub(/[^\w\d]/, "")
=> "cdbazlsl"

那么在Python中,有什么类似的函数可以用呢?

5 个回答

2

re.subn() 是个好帮手:

>>> import re
>>> key = "cd baz ; ls -l"
>>> re.subn(r'\W', "", key)
('cdbazlsl', 6)
>>> re.subn(r'\W', "", key)[0]
'cdbazlsl'

这个函数会返回一个元组。如果你只想要结果字符串,可以取第一个元素。或者像SilentGhost提到的那样,直接使用re.sub()。也就是说,他的回答更准确一些。

6

到目前为止,大家的回答都集中在如何实现和你的Ruby代码一样的功能,但这正好和你问题中英文部分的要求相反:你的代码是去掉那些匹配的字符,而你的文本是想要

一种简单的方法来去掉给定字符串中所有不匹配的字符

举个例子,假设你的正则表达式是 r'\d{2,}',意思是“两个或更多数字”——所以不匹配的部分就是所有非数字字符以及所有单独的数字。根据你的文本要求,去掉不匹配的部分也是很简单的:

>>> import re
>>> there = re.compile(r'\d{2,}')
>>> ''.join(there.findall('123foo7bah45xx9za678'))
'12345678'

补充说明: 好的,提问者现在已经澄清了问题(他确实是想要和他的代码一致,而不是他文本中的说法,现在文本也正确了;-) 但我还是把这个回答保留下来以便完整性(其他建议使用 re.sub 的回答对于现在的问题是正确的)。我意识到你可能是想要你在Ruby代码中“说”的内容,而不是你在英文文本中说的内容,但以防万一,我觉得还是有必要补充一下答案的完整性!-)

14
import re
re.sub(pattern, '', s)

文档

撰写回答