我有一个以下形式的字符串:
"425x344"
现在我想将此字符串中的第一个和第二个数字解析为两个单独的变量。我怎样才能做到这一点 ?我创建了这个正则表达式:
regex = re.compile(r"^(\d+x\d+)")
检查字符串形式是否正确。但接下来呢?
答案 0 :(得分:5)
a, b = '425x344'.split('x')
答案 1 :(得分:2)
由于您使用正则表达式对其进行过滤,因此您可以执行
a, b = map(int, s.split('x'))
res = a * b
如果您计划乘法,可以在一行中完成:
res = eval(s.replace('x', '*'))
或
res = (lambda x, y: x * y)(*map(int, s.split('x')))
使用导入和一行,可以使用
完成import operator
res = operator.mul(*map(int, s.split('x')))
你必须对它们进行分析才能看出哪个更快。
答案 2 :(得分:1)
将其更改为:
regex = re.compile(r"^(\d+)x(\d+)")
然后使用regex.match(my_string)来取出MatchObject,你可以使用match.group(1)和match.group(2)来获取变量。
答案 3 :(得分:0)
你可能意味着“价值观”或“文字”。 425通常不是变量的有效名称,它往往具有符号名称。
如果您更改正则表达式以分别捕获数字:
regex = re.compile(r"^(\d+)x(\d+)")
然后你可以使用这样的代码:
str = "425x344"
mo = regex.search(str)
if mo != None:
print "%s=%d" % (str, int(mo.group(1)) * int(mo.group(2)))
计算结果。
答案 4 :(得分:0)
如果你想用re做,http://effbot.org/zone/xml-scanner.htm可能值得一读。它显示了如何使用re
正确地拆分expr中的每个参数import re
expr = "b = 2 + a*10"
for item in re.findall("\s*(?:(\d+)|(\w+)|(.))", expr):
print item