给定一个字符串,Python中提取字符串中所有整数的最佳方法

Mic*_*ern -2 python regex text

给定一个未知格式的字符串,但预计包含已知数量的整数,我想将这些整数提取为a List或如果整数的数量与预期的不匹配则返回错误.

因此,例如,如果字符串读取'This is a test 1 2 3 55',并且预期的整数数量是4,则应该返回[1, 2, 3, 55].

如果字符串读取'(1 2 3 55)',并且预期的整数数是6,则应返回错误.

在其他语言中,我会在所有空格或标点符号中分成单词,测试每个单词的数字状态,并抛弃未通过测试的单词,但我是Python的新手并且对是否有更好的方法感到好奇.

Ved*_*hta 6

你可以使用正则表达式 -

import re

s = 'This is a test 1 2 3 55'

expr = r'\d+'

print(list(map(int, re.findall(expr, s))))
Run Code Online (Sandbox Code Playgroud)

如果您不想使用正则表达式,这也可以 -

s = 'This is a test 1 2 3 55'

arr = [int(x) for x in s.split() if x.isdigit()]

print(arr)
Run Code Online (Sandbox Code Playgroud)

输出 -

[1, 2, 3, 55]
Run Code Online (Sandbox Code Playgroud)

正如迈克尔·斯特恩评论,如果您输入字符串具有floats或混合物intstr(如"55ab9"),并要忽略他们,那么第一种方法是行不通的.您应该按空格拆分并将每个元素与正则表达式匹配r'^\d+$'.