繁体   English   中英

Python - 使用正则表达式过滤数据

[英]Python - Use a Regex to Filter Data

是否有一种简单的方法可以从给定字符串中删除与给定正则表达式匹配的所有字符? 我知道在Ruby中我可以使用gsub

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

Python中的等效函数是什么?

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

文件

到目前为止,答案都集中在与Ruby代码做同样的事情,这与你在问题的英文部分提出的内容完全相反:代码删除了DO匹配的字符,而你的文本要求

从给定字符串中删除无法匹配的所有字符的简单方法

例如,假设你的RE的模式是r'\\d{2,}' ,“两个或更多个数字” - 所以不匹配的部分将是所有非数字加上所有单个孤立的数字。 按照文本要求删除不匹配的部分也很容易:

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

编辑 :好的,OP现在澄清了这个问题(他确实意味着他的代码,而不是他的文字说,现在文本也是正确的;-)但是我要留下完整的答案(其他答案暗示re.sub对于现在的问题是正确的)。 我意识到你可能意味着你在Ruby代码中“说”了什么,而不是你在英文文本中所说的,但是,以防万一,我认为我最好完成答案集! - )

re.subn()是你的朋友:

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

返回一个元组。 如果您只想要结果字符串,请取第一个元素。 或者只是调用re.sub(),如SilentGhost所述。 (也就是说,他的答案更准确。)

import re
old = "cd baz ; ls -l"
regex = r"[^\w\d]" # which is the same as \W btw
pat = re.compile( regex )
new = pat.sub('', old )

可能是最短的方式:

In [32]: pattern='[-0-9.]'
   ....: price_str="¥-607.6B"
   ....: ''.join(re.findall(pattern,price_str))
Out[32]: '-607.6'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM