我有一个字符串,就像那样:
<123, 321>
数字的范围可以介于0
到999
之间。
我需要尽可能快地将这些坐标插入到两个变量中,所以我想到了正则表达式。我已经将字符串拆分为两部分,现在我需要将整数与所有其他字符隔离开来。 我尝试过这种模式:
^-?[0-9]+$
但输出是:
[]
任何帮助? :)
答案 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']