我的两分钱,你可以使用下面的模式和re.search:
\bserial 7's\s(\d+(?:-\d+)*)
import re
s = "serial 7's 93-86-79-72-65 very slow, recall 3/3 "
res = re.search(r"\bserial 7's\s(\d+(?:-\d+)*)", s)
if res:
print(res.group(1).split('-')) # ['93', '86', '79', '72', '65']
else:
print('No match')
我会首先检查是否有任何匹配实际发生,其中模式必须包含数字,如果有多个值,则由连字符分隔。既然您提到了:“请注意,我们尝试提取的整数数量可能未知。我只想要具有特定模式的数字。”。
-
\b - 字边界。
-
serial 7's - 从字面上匹配“序列 7”。
-
\s+ - 一个或多个空格字符。
-
( - 打开捕获组。
-
\d+ - 至少匹配一个数字。
-
(?:-\d+)* - 零次或多次连字符后跟至少一个数字的非捕获组。
-
) - 关闭捕获组。
或者,可以使用regex 模块,并使用非固定宽度的正向后视:
(?<=\bserial 7's\s+(?:\d+-)*)\d+
import regex
s = "serial 7's 93-86-79-72-65 very slow, recall 77 3/3 "
lst = regex.findall(r"(?<=\bserial 7's\s+(?:\d+-)*)\d+", s)
print(lst) # ['93', '86', '79', '72', '65']
-
(?<= - 积极向后看的开始。
-
\b - 一个词的边界。
-
serial 7's - 字面意思是“序列 7”。
-
\s+ - 一个或多个空格字符。
-
(?: - 打开非捕获组。
-
\d+- - 至少匹配一个数字,后跟一个连字符。
-
)* - 关闭非捕获组并匹配它零次或多次。
-
) - 积极向后看。
-
\d+ - 至少匹配一个数字。