【问题标题】:Resolve variables from a string从字符串中解析变量
【发布时间】:2011-05-15 04:14:15
【问题描述】:

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

"425x344"

现在我想将此字符串中的第一个和第二个数字解析为两个单独的变量。我怎样才能做到这一点 ?我创建了这个正则表达式:

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

检查字符串形式是否正确。但是接下来呢?

【问题讨论】:

  • 使用...$.match(或^...$.search)来确保整个sting 都被消耗掉。截至目前,运行正则表达式的两种方式都接受1x1foo
  • 并且使用$ 将接受1x1\n

标签: python regex match


【解决方案1】:

a, b = '425x344'.split('x')

【讨论】:

  • 虽然这会给你作为字符串的数字。
  • OP 刚刚说他/她想要两个单独的变量。
  • a, b = [int(n) for n in '425x344'.split('x')]
  • @Rafael、intstr 和其他内置类构造函数是map 比列表理解更好的少数情况之一。你知道的越多。
  • @aaronasterling 很高兴知道,但原因是什么?
【解决方案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')))

您必须对它们进行分析以查看哪个更快。

【讨论】:

  • 没关系。这是因为我缺少一个括号。作为一只黑猩猩,我受到如此多的歧视,以至于我变得有点敏感。感谢匿名投票者提供有用的错误消息。你应该找到一份 C 编译器的工作。
  • ... 或 Python 编译器... Syntax Error: invalid syntax
【解决方案3】:

改成:

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

然后使用 regex.match(my_string) 将 MatchObject 取出,您可以使用 match.group(1) 和 match.group(2) 取出变量。

【讨论】:

  • group(0) 返回完整的匹配文本。你想要group(1)group(2)
【解决方案4】:

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

计算结果。

【讨论】:

    【解决方案5】:

    如果您想使用 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
    

    【讨论】:

      猜你喜欢
      • 2020-01-12
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      相关资源
      最近更新 更多