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的新手并且对是否有更好的方法感到好奇.
你可以使用正则表达式 -
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或混合物int和str(如"55ab9"),并要忽略他们,那么第一种方法是行不通的.您应该按空格拆分并将每个元素与正则表达式匹配r'^\d+$'.