Q
从字符串
1
A
回答
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)
查看演示。
相关问题
卸下只是字母会离开 - '__2.2.14_43.33_' - 为你的榜样,是你想要的吗? –