如何在python中使用正则表达式删除字母并提取数字?

时间:2019-04-01 09:13:20

标签: python regex python-3.x

如何在python中使用正则表达式删除字母并提取数字?

import re
l=["098765432123 M","123456789012"]
s = re.findall(r"(?<!\d)\d{12}", l)
print(s)
  

预期输出:

123456789012

4 个答案:

答案 0 :(得分:3)

如果只想对过滤过的列表(包含纯数字元素),请使用filterstr.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将找到一个或多个定义的字符,并且始终会找到这些字符的最长连续行。

如果您只想查找没有字母的字符串:

+