使用python识别字符串中的特定数字

时间:2018-03-03 13:47:01

标签: python

我想使用python 3.5

在字符串中的每个“:”(冒号)之后提取一个数字

我的字符串是:

x= "RTD - Shanghai Indices - STD DLY - Indices - 11054 - ID:1053 (INACTIVE) RTD - SIX Swiss incl. SWX Europe - STD L1 - Equity - 10969 - ID:1096 (INACTIVE)"

我用过:

 re.findall('\d+', x)

但这会返回所有数字:

['11054', '1053', '1', '10969', '1096']

但最终结果应该是:

[1053, 1096]

4 个答案:

答案 0 :(得分:3)

怎么样:

re.findall(':(\d+)', x)

括号将与您想要的组匹配,之前的冒号将与实际文字:匹配。它将返回:后的数字。

>>> import re
>>> x= "RTD - Shanghai Indices - STD DLY - Indices - 11054 - ID:1053 (INACTIVE) RTD - SIX Swiss incl. SWX Europe - STD L1 - Equity - 10969 - ID:1096 (INACTIVE)"
>>> re.findall(':(\d+)', x)
['1053', '1096']

答案 1 :(得分:1)

:之后搜索数字并转换为所需输出的整数:

>>> [int(y) for y in re.findall(':(\d+)', x)]
[1053, 1096]

答案 2 :(得分:1)

您匹配\d+,这是所有数字。如果您只想匹配前面带冒号的数字,请将其添加到正则表达式中::(\d+)

>>> import re
>>> x= "RTD - Shanghai Indices - STD DLY - Indices - 11054 - ID:1053 (INACTIVE) RTD - SIX Swiss incl. SWX Europe - STD L1 - Equity - 10969 - ID:1096 (INACTIVE)"
>>> re.findall(r':(\d+)', x)
['1053', '1096']

答案 3 :(得分:1)

使用

re.findall(r'(?<=\:)\d+', x)

积极的外观(?&lt; = :) 断言下面的正则表达式匹配

:匹配字符:字面意思(区分大小写)

\ d +匹配一个数字(等于[0-9])

+ Quantifier - 在一次和无限次之间匹配,尽可能多次,根据需要回馈