正则表达式:特殊字符之间的数字(但不是所有数字)

时间:2017-09-30 14:09:41

标签: python regex

我正在尝试解决一个相对简单的解析问题,正则表达式似乎很适合。我仍然试图绕着符号绕开,所以我希望能够在正确的方向上轻轻推动我想做的事情。我拥有的字符串采用以下格式:

x = 'Testing - 12:34: I dont want this number at the end 4567:'

从我能够写的:

test = re.findall(r'\b(\d+)\b',x)

将给出

的输出
['12', '34', '4567']

它很接近,但并不完全存在。问题不是我最后要扫描的每一个字符串,所以我想要一个正则表达式而不仅仅是

test = test[:2]

基本上,我试图表达的条件是“把 - 和第二个之间的数字:但是没有别的。” (即12:34,形式为['12','34])。这可能吗?谢谢!

http://regexstorm.net/tester?p=%3b%5cd%2b%3d%5cd%2b%5c%3f&i=0014%3b5010730101000033347%3d4510120173%3fAA

1 个答案:

答案 0 :(得分:2)

使用两个表达式可以更轻松地很多

import re

x = 'Testing - 12:34: I dont want this number at the end 4567:'

rx_outer = re.compile(r'-((?:[^:]*:){2})')
rx_inner = re.compile(r'\d+')

numbers = [number.group(0) 
            for match in rx_outer.finditer(x) 
            for number in rx_inner.finditer(match.group(0))]

print(numbers)
# ['12', '34']

“外部”正则表达式定义第一个破折号和第二个冒号之间的切片,而“内部”正则表达式扫描数字。逻辑包含在列表理解中。