数字的正则表达式问题(python)

时间:2015-05-12 06:01:27

标签: python regex

我有一个字符串,就像那样:

<123, 321>

数字的范围可以介于0999之间。

我需要尽可能快地将这些坐标插入到两个变量中,所以我想到了正则表达式。我已经将字符串拆分为两部分,现在我需要将整数与所有其他字符隔离开来。 我尝试过这种模式:

 ^-?[0-9]+$ 

但输出是:

[]

任何帮助? :)

3 个答案:

答案 0 :(得分:2)

如果你的字符串遵循相同的格式<123, 321>,那么这应该比正则表达式方法快一点

def str_translate(s):
    return s.translate(None, " <>").split(',')

In [52]: str_translate("<123, 321>")
Out[52]: ['123', '321']

答案 1 :(得分:1)

您需要做的就是摆脱锚点(^$

>>> import re
>>> string = "<123, 321>"
>>> re.findall(r"-?[0-9]+", string)
['123', '321']
>>> 

注意 ^ $模式-?[0-9]+的开头和结尾处的锚点确保字符串仅包含数字。

这就是正则表达式引擎尝试匹配字符串开头的模式,^使用-?[0-9]+直到字符串$结束。但它失败了,因为<

无法匹配-?[0-9]+

re.findall会找到与模式-?[0-9]+匹配的所有子字符串,即数字。

答案 2 :(得分:0)

"^-?[0-9]+$"只匹配包含数字的字符串,而不包含任何其他内容。

您想要匹配一个组和该组的摘录:

>>> pattern = re.compile("(-?[0-9]+)")
>>> pattern.findall("<123, 321>")
['123', '321']