正则表达式Python Extract numb

2024-10-03 11:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从文本字符串中仅提取数字。 很多时候出现C{d}{d}{d}。。。必须移除。只保留数字。你知道吗

text=['C1412DRE, New York 2695','Direction 12','Main Street 6254 C13D']
re.sub('[a-zA-Z]', '', str(text))


Desired output:
[2695,12,6254]

Tags: 字符串text文本restreetnewmain数字
2条回答

不带regexp

text = ['C1412DRE, New York 2695','Direction 12','Main Street 6254 C13D']
str = ' '.join(text)
[int(s) for s in str.split() if s.isdigit()]
[2695, 12, 6254]

使用regexp:

import re
re.findall(r'\b\d+\b', str)                                                                                                                                                                                                                          
['2695', '12', '6254']

把它们转换成数字

[int(s) for s in re.findall(r'\b\d+\b', str)]
[2695, 12, 6254]

https://docs.python.org/3/library/re.html

您可以使用codegen尝试regexp:https://regex101.com/r/4kUHhq/1

我宁愿搜索所有独立的数字,而不是试图去掉所有的字母字符。这里有一个选项,将re.findall与regex模式\b\d+\b一起使用:

text = ['C1412DRE, New York 2695','Direction 12','Main Street 6254 C13D']
inp = ' '.join(text)
matches = re.findall(r'\b\d+\b', inp)
print(matches)

['2695', '12', '6254']

我的逻辑中可能存在的一个缺陷是,我将您的字符串列表合并为一个字符串,用空格分隔。这是必需的,因为re.findall需要单个字符串进行搜索。但是,由于regex模式只寻找已经被单词边界分隔的数字,所以按空格连接不应该引入任何副作用(我认为)。你知道吗

相关问题 更多 >