将字符串拆分为多个变量

发布于 2024-10-04 01:16:43 字数 196 浏览 8 评论 0原文

我有一个以下形式的字符串:

"425x344"

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

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

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

I have a string in the following form :

"425x344"

Now I'd like to resolve first and second numbers from this string as two separate variables. How can I do this ? I've created this regex:

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

to check if the string form is proper. But what next ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

深府石板幽径 2024-10-11 01:16:43

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

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

彻夜缠绵 2024-10-11 01:16:43

由于您正在使用正则表达式对其进行过滤,因此您可以执行以下操作

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')))

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

Since you're filtering it with a regex, you can just do

a, b = map(int, s.split('x'))
res = a * b

If you're planning on multiplying, it can be done in one line:

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

or

res = (lambda x, y: x * y)(*map(int, s.split('x')))

With an import and one line, this can be done with

import operator

res = operator.mul(*map(int, s.split('x')))

You'll have to profile them to see which is faster.

琉璃梦幻 2024-10-11 01:16:43

改为:

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

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

Change it to:

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

Then use regex.match(my_string) to get the MatchObject out, and you can use match.group(1) and match.group(2) to get the variables out.

雨夜星沙 2024-10-11 01:16:43

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

来计算结果。

You probably mean "values", or "literals". 425 is not typically a valid name for a variable, which tend to have symbolic names.

If you change your regular expression to capture the numbers separately:

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

you can then use code like this:

str = "425x344"
mo = regex.search(str)
if mo != None:
  print "%s=%d" % (str, int(mo.group(1)) * int(mo.group(2)))

to compute the result.

凉风有信 2024-10-11 01:16:43

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

If you are wanting to do it with re, http://effbot.org/zone/xml-scanner.htm might be worth a read. It shows how to properly split each argument in a expr with re

import re

expr = "b = 2 + a*10"

for item in re.findall("\s*(?:(\d+)|(\w+)|(.))", expr):
    print item
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文