如何在python中使用正则表达式删除字母并提取数字?
import re
l=["098765432123 M","123456789012"]
s = re.findall(r"(?<!\d)\d{12}", l)
print(s)
预期输出:
123456789012
答案 0 :(得分:3)
如果只想对过滤过的列表(包含纯数字元素),请使用filter
和str.isdigit
:
list(filter(str.isdigit, l))
或者按照@tobias_k的建议,list
理解永远是您的朋友:
[s for s in l if s.isdigit()]
输出:
['123456789012']
答案 1 :(得分:0)
仅保留数字,您可以执行re.findall('\d',s)
,但您会得到一个列表:
s = re.findall('\d', "098765432123 M")
print(s)
> ['0', '9', '8', '7', '6', '5', '4', '3', '2', '1', '2', '3']
答案 2 :(得分:0)
如果您只想使用正则表达式,我建议使用否定的超前断言。
l=["098765432123 M","123456789012"]
res=[]
for a in l:
s = re.search(r"(?<!\d)\d{12}(?! [a-zA-Z])", a)
if s is not None:
res.append(s.group(0))
结果将是:
['123456789012']
答案 3 :(得分:0)
要清楚一点,如果其中包含字母字符,您想忽略整个字符串吗?还是仍然要提取包含数字和字母字符的字符串的数字?
如果要查找所有数字,并且始终查找最长的数字,请使用以下方法:
ImportError: cannot import name 'return_future' from 'tornado.concurrent' (/anaconda3/lib/python3.7/site-packages/tornado/concurrent.py)
regex = r"\d+"
matches = re.finditer(regex, test_str, re.MULTILINE)
将搜索数字,\d
将找到一个或多个定义的字符,并且始终会找到这些字符的最长连续行。
如果您只想查找没有字母的字符串:
+