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

时间:2016-02-15 11:57:50

标签: python regex string

我想从一个短字符串中提取数字,基于数字位于字符前面的条件(final AlertDialog builder = new AlertDialog.Builder(context, R.style.CustomAlert) .setPositiveButton("Button", new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { //DO YOUR TASK (open your second dialog) } }) .setNegativeButton("Cancel", null) .setView(linearLayout) .setCancelable(false) .create(); builder.show(); 标志)。

示例和结果:

S

我可以将字符串拆分为列表以获取单个元素

> 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

3 个答案:

答案 0 :(得分:4)

re.findall与正则表达式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']

要获得整数输出,您可以在列表中转换它们或使用map

>>> list(map(int,['18', '10']))
[18, 10]

答案 1 :(得分:1)

您可以使用regular expression

import re
regex = r"(\d+)S"
match = re.search(regex, '10M26S')
print(match.group(1))  # '26'

答案 2 :(得分:-1)

import re

[int(m) for m in re.findall(r'(\d+)S', "input10string30")]

这应该可以解决问题