Python 正则表达式:特殊字符之间的数字(但不是所有数字)
我试图解决一个相对简单的解析问题,正则表达式似乎非常适合这个问题。我仍在努力把我的头绕在符号上,所以我希望能在正确的方向上推动我正在尝试做的事情。我拥有的字符串的格式如下:Python 正则表达式:特殊字符之间的数字(但不是所有数字),python,regex,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'] 很近,但不是很近。问题不在于我要扫描的每个字符串的末尾,
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)。这可能吗?谢谢大家!
使用两个表达式,这可能要容易得多:
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']
“外部”正则表达式定义第一个破折号和第二个冒号之间的切片,“内部”正则表达式扫描数字。逻辑被包装在一个列表理解中。为什么不想要最后一个数字呢?我正在解析的某些数据行中发生的更多的是一个错误,但会造成巨大的混乱。也许搞乱正则表达式不是正确的答案,我应该删除字符串的最后几个元素,让所有元素都能完全避免这个问题?我的问题更像是“这意味着什么”:
问题不是我最后要扫描的每个字符串,所以我想要一个正则表达式语句
Ah gotcha。我的意思是不是每个字符串的结尾都有一个数字的问题(这就是我编写的简单正则表达式不起作用的原因)…我只是想证明我通过正则表达式解决这个问题的动机。@user6142489 Like?