2015-07-03 12 views
1

在Python中只删除字母字符,从字符串

我有一个像

"dsafsadf_afasa_2.2.14_43.33_dsfd" 

字符串,我需要得到公正

"2.2.14_43.33" 

我该怎么办呢?

+0

卸下只是字母会离开 - '__2.2.14_43.33_' - 为你的榜样,是你想要的吗? –

回答

0

好像你正在尝试删除所有字母和所有的下划线,除非该undercore存在其间的数字,。

>>> s = "dsafsadf_afasa_2.2.14_43.33_dsfd" 
>>> re.sub(r'[a-z]|(?<=\D)_(?=\d)|(?<=\d)_(?=\D)|(?<=\D)_(?=\D)|^_+|_+$', '', s) 
'2.2.14_43.33' 
0

您可以使用str.translate如果你只是想删除的字母:

s = "dsafsadf_afasa_2.2.14_43.33_dsfd" 


from string import ascii_letters 
print(s.translate(None,ascii_letters)) 

,输出:

__2.2.14_43.33_ 

对于python3:

from string import ascii_letters 
print(s.translate({ord(ch):"" for ch in ascii_letters})) 

如果你真的想从最终使用条去除下划线:

s = "dsafsadf_afasa_2.2.14_43.33_dsfd" 

from string import ascii_letters 

print(s.translate(None,ascii_letters).strip("_")) 

输出:

2.2.14_43.33 
+0

此答案是否有其他问题?我跑了这个并得到 - TypeError:translate()只需要一个参数(给出2)'。然后在删除'None'后我跑了这个,我得到了''dsafsadf_afasa_YUYUX4_4ZUZZ_dsfd'。如果这只是一些特定的python版本,我会建议在答案中指定。 (它只在Python 2.x中运行,在Python 3.x中不起作用) –

+0

@AnandSKumar,那么你必须做错了或使用python3 –

0

您可以简单地做一个re.findall

import re 
p = re.compile(r'\d+(?:[\W_]\d+)*') 
test_str = "dsafsadf_afasa_2.2.14_43.33_dsfd" 

re.findall(p, test_str) 

查看演示。

https://regex101.com/r/hF1wE3/2