我想使用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]
答案 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 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈