Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式:特殊字符之间的数字(但不是所有数字)_Python_Regex - Fatal编程技术网

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?