Python 从字符串解析变量

Python 从字符串解析变量,python,regex,match,Python,Regex,Match,我有一个字符串,格式如下: “425x344” 现在我想将这个字符串中的第一个和第二个数字解析为两个独立的变量。我该怎么做?我创建了这个正则表达式: regex=re.compile(r“^(\d+x\d+)) 检查字符串形式是否正确。但是下一步怎么办呢?a,b='425x344'。拆分('x')既然你用正则表达式过滤它,你就可以这样做了 a, b = map(int, s.split('x')) res = a * b 如果您计划进行乘法运算,可以在一行中完成: res = eval(s.r

我有一个字符串,格式如下:

“425x344”

现在我想将这个字符串中的第一个和第二个数字解析为两个独立的变量。我该怎么做?我创建了这个正则表达式:

regex=re.compile(r“^(\d+x\d+))


检查字符串形式是否正确。但是下一步怎么办呢?

a,b='425x344'。拆分('x')
既然你用正则表达式过滤它,你就可以这样做了

a, b = map(int, s.split('x'))
res = a * b
如果您计划进行乘法运算,可以在一行中完成:

res = eval(s.replace('x', '*'))

通过导入和一行,可以使用

import operator

res = operator.mul(*map(int, s.split('x')))
您必须对其进行配置,以查看哪个更快

将其更改为:

regex = re.compile(r"^(\d+)x(\d+)")
然后使用regex.match(my_字符串)取出MatchObject,您可以使用match.group(1)和match.group(2)取出变量。

您可能指的是“值”或“文字”。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)))

计算结果。

如果你想用re来计算,可能值得一读。它展示了如何使用re正确分割expr中的每个参数

import re

expr = "b = 2 + a*10"

for item in re.findall("\s*(?:(\d+)|(\w+)|(.))", expr):
    print item

虽然这会将数字作为字符串提供给你。OP只是说他/她希望它包含在两个单独的变量中。a,b=[int(n)代表'425x344'中的n。split('x')]@Rafael,
int
str
和其他内置类构造函数是
map
优于列表理解的少数情况之一。你知道的越多。@aaronasterling很高兴知道,但是基本原理是什么?使用
..$
.match
(或
^..$
.search
)来确保整个螫针都被消耗掉了。现在,运行regex的两种方法都接受
1x1foo
。使用
$
将接受
1x1\n
组(0)
返回完整的匹配文本。您需要
组(1)
组(2)
。无需担心。因为我少了一个括号。作为一只黑猩猩,我受到如此多的歧视,以至于我变得有点敏感。感谢匿名downvoter提供的有用的错误消息。你应该得到一份C编译器的工作。。。。或者Python编译器<代码>语法错误:无效语法
import re

expr = "b = 2 + a*10"

for item in re.findall("\s*(?:(\d+)|(\w+)|(.))", expr):
    print item