我正在尝试解决一个相对简单的解析问题,正则表达式似乎很适合。我仍然试图绕着符号绕开,所以我希望能够在正确的方向上轻轻推动我想做的事情。我拥有的字符串采用以下格式:
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])。这可能吗?谢谢!
答案 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']
“外部”正则表达式定义第一个破折号和第二个冒号之间的切片,而“内部”正则表达式扫描数字。逻辑包含在列表理解中。