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'