在正则表达式中匹配字符串中的数字并转换为整数[重复]

Posted

技术标签:

【中文标题】在正则表达式中匹配字符串中的数字并转换为整数[重复]【英文标题】:Matching numbers in strings in regex and converting into integers [duplicate] 【发布时间】:2018-09-04 23:31:16 【问题描述】:

我正在尝试使用 re.findall() 匹配给定文本正文中的所有数字并将它们转换为整数。我知道[0-9]+[\d]+ 之类的东西应该匹配字符串中的任何数字,但是,我的输出会单独拆分数字(例如,'125' 变为'1'、'2'、'5'。

这是我所拥有的:

import re

regex_list = []

sample = "Here are a bunch of numbers 7746 and 12 and 1929 and 8827 and 7 and 8837 and 128 now convert them"

for line in sample:
    line = line.strip()
    if re.findall('([0-9]+)', line):
        regex_list.append(int(line))
print(regex_list)

输出:

[7, 7, 4, 6, 1, 2, 1, 9, 2, 9, 8, 8, 2, 7, 7, 8, 8, 3, 7, 1, 2, 8]

期望的输出:

[7746, 12, 1929, 8827, 7, 8837, 128]

【问题讨论】:

问题不在于正则表达式,问题在于您的for 循环。看看line 的值...(顺便说一句,这应该是调试此问题的首要任务之一。) 好的,感谢您的澄清,我不知道使用 for 循环会产生这种效果 【参考方案1】:

for line in sample 将单个字符存储在 line 中,直到您的 sample 是行列表

【讨论】:

【参考方案2】:

查看@chrisz's answer 以获得更好的解决方案。

但是,如果你想知道你的问题是什么:

使用for 循环遍历字符串会得到单个字符,而不是你想象的单词。要获取单词,您必须使用split()

regex_list = []

sample = "Here are a bunch of numbers 7746 and 12 and 1929 and 8827 and 7 and 8837 and 128 now convert them"

for line in sample.split():
    line = line.strip()
    if re.findall('([0-9]+)', line):
        regex_list.append(int(line))

print(regex_list)
# [7746, 12, 1929, 8827, 7, 8837, 128]

但是,由于您是单独获取单词,因此无需使用正则表达式。您可以直接联系我们isdigit()

for line in sample.split():
    line = line.strip()
    if line.isdigit():
        regex_list.append(int(line))

或者,简单地使用列表推导:

num_list = [int(word) for word in sample.split() if word.isdigit()]
print(num_list)
# [7746, 12, 1929, 8827, 7, 8837, 128]

【讨论】:

【参考方案3】:

您的问题是您当前正在逐个字符地循环,而您实际上可以将正则表达式应用于整行。

>>> import re    
>>> s = "Here are a bunch of numbers 7746 and 12 and 1929 and 8827 and 7 and 8837 and 128 now convert them"
>>> [int(j) for j in re.findall(r'[0-9]+', s)]
[7746, 12, 1929, 8827, 7, 8837, 128]

【讨论】:

以上是关于在正则表达式中匹配字符串中的数字并转换为整数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:匹配单个数字重复n次

正则表达式将多次出现与字符串 C# 中的数字匹配

将JSON中的大数字解析为字符串[重复]

将java字符串转换为与replaceAll中的正则表达式兼容的字符串[重复]

正则表达式的空值该如何写?

LeetCode:8. 字符串转换整数(python3)