假设我有以下字符串
string = "serial 7's 93-86-79-72-65 very slow, recall 3/3 "
Run Code Online (Sandbox Code Playgroud)
现在,我想在 Python 中使用正则表达式找到一组数字。请注意,数字前面必须有"serial 7's"
我尝试过的以下内容:
re.findall('(?<=serial 7\'s )(\d+, )', string)
re.findall('(?<=serial 7\'s )(\d+, )+', string)
Run Code Online (Sandbox Code Playgroud)
似乎没有任何效果。请注意,我们尝试提取的整数数量可能未知。我只想要具有特定模式的数字。不是其他可能分散在文本中的数字。
预期输出: ['93','86','79','72','65']
小智 5
另一种使用正则表达式的方法:
import re
string = "serial 7's 93-86-79-72-65 very slow, recall 3/3 "
regex = r"(?<=serial 7's) (\d+-?)+"
matches = re.finditer(regex, test_str, re.MULTILINE)
for match in matches:
integers = match.group(0).strip().split("-")
print(integers) # ['93', '86', '79', '72', '65']
Run Code Online (Sandbox Code Playgroud)
我的两分钱,你可以使用以下模式re.search
:
\bserial 7's\s(\d+(?:-\d+)*)
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
我会检查是否有任何匹配实际上首先发生,其中模式必须包含数字,如果有多个值,则由连字符分隔。既然您提到:“请注意,我们尝试提取的整数数量可能未知。我只想要具有特定模式的数字。” 。
\b
- 单词边界。serial 7's
- 按字面意思匹配“serial 7's”。\s+
- 一个或多个空白字符。(
- 打开捕获组。\d+
- 至少匹配一个数字。(?:-\d+)*
- 非捕获组包含零次或多次连字符,后跟至少一个数字。)
- 关闭捕获组。或者,可以使用regex
module 并使用非固定宽度的正向后查找:
(?<=\bserial 7's\s+(?:\d+-)*)\d+
Run Code Online (Sandbox Code Playgroud)
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']
Run Code Online (Sandbox Code Playgroud)
(?<=
- 积极回顾的开始。
\b
- 一个词的边界。serial 7's
- 字面意思是“系列7”。\s+
- 多一个空白字符。(?:
- 打开非捕获组。
\d+-
- 至少匹配一个数字,后跟连字符。)*
- 关闭非捕获组并匹配零次或多次。)
- 关闭积极的后视。\d+
- 至少匹配一个数字。 归档时间: |
|
查看次数: |
2644 次 |
最近记录: |