簡體   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