Python 按条件从字符串中提取数字

Python 按条件从字符串中提取数字,python,regex,string,Python,Regex,String,我想从一个短字符串中提取数字,条件是数字在字符前面(Sflag) 示例和结果: > string = '10M26S' > 26 > string = '18S8M10S' > [18,10] OR 28 > string = '7S29M' > 7 我可以将字符串拆分为一个列表以获取单个元素 result = [''.join(g) for _, g in groupby('18S8M10S', str.isalpha)] > ['18', 'S

我想从一个短字符串中提取数字,条件是数字在字符前面(
S
flag)

示例和结果:

> string = '10M26S'
> 26

> string = '18S8M10S'
> [18,10] OR 28

> string = '7S29M'
> 7
我可以将字符串拆分为一个列表以获取单个元素

result = [''.join(g) for _, g in groupby('18S8M10S', str.isalpha)]
> ['18', 'S', '8', 'M', '10', 'S'] 
但是我怎么能得到
18
10

与正则表达式一起使用
r'(\d+)S'
。这将匹配大写字母
S
之前的所有数字

>>> string = '10M26S'
>>> re.findall(r'(\d+)S',string)
['26']
>>> string = '18S8M10S'
>>> re.findall(r'(\d+)S',string)
['18', '10']
>>> string = '7S29M'
>>> re.findall(r'(\d+)S',string)
['7']
要获得整数输出,您可以在列表comp中转换它们或使用

这应该可以做到这一点,你可以使用


谢谢你的帮助。对于字符串:18S8M10S,它只打印18个(第一个匹配的数字),请尝试使用而不是。它返回一个匹配列表,而不仅仅是一个匹配列表
>>> list(map(int,['18', '10']))
[18, 10]
import re

[int(m) for m in re.findall(r'(\d+)S', "input10string30")]
import re
regex = r"(\d+)S"
match = re.search(regex, '10M26S')
print(match.group(1))  # '26'