【问题标题】:Save regular expression result in variable将正则表达式结果保存在变量中
【发布时间】:2017-03-29 13:25:15
【问题描述】:

我想将一个字符串拆分为单独的单个字符串,并将每个字符串保存在一个新变量中。这就是用例:

  • 使用BC1 = input("BC1: ") 直接用户输入,格式如下:'17899792270101010000000000', '17899792270102010000000000', '17899792270103010000000000'

  • 现在我想要每个数字 - 并且只是单个变量中的数字:

    a = 17899792270101010000000000
    b = 17899792270102010000000000
    c = 17899792270103010000000000
    

如何在 python 3 中实现这一点?

遗憾的是,我无法为其创建合适的正则表达式,也无法将字符串部分保存在单独的变量中。我希望你们中的某个人可以帮助我。 提前致谢!

【问题讨论】:

  • 你会说这是 csv 格式吗?如果是,为什么不使用 csv 模块?
  • 查看 re.match - 它返回匹配的正则表达式部分,通过在部分周围放置 ( ) 来指定。
  • 无论如何,有人可能会过来回答这个问题,但为了将来参考,您可以通过证明自己已经付出了一些努力来增加获得高质量帮助的机会。展示您尝试过的代码,并描述输出与您的预期有何不同。
  • 人们在这里自愿投入时间,您会发现他们愿意为您提供帮助的时间与您所投入的工作量相关它自己。另外,如果你展示了你失败的尝试,有人可以解释为什么它是错误的以及如何解决它(或者是否最好朝着完全不同的方向前进)。
  • 不管怎样,所提出的问题不需要recsv 或任何其他模块。 (提示:split()strip()int()

标签: python string python-3.x variables


【解决方案1】:

查看re

import re

input = "'17899792270101010000000000', '17899792270102010000000000', '17899792270103010000000000'"

 matches = re.findall('(\d+)', input)
 # matches = ['17899792270101010000000000', '17899792270102010000000000', '17899792270103010000000000']

 a, b, c = re.findall('(\d+)', input)
 # a = '17899792270101010000000000'
 # b = '17899792270102010000000000'
 # c = '17899792270103010000000000'

编辑: 如果你想要int而不是str,你可以map(int, matches)

【讨论】:

  • 非常感谢!我会根据自己的需要调整该解决方案。
【解决方案2】:

如果我理解正确,这应该可以解决问题

BC1 = input("BC1: ")
numbers = [int(x.strip(' \'')) for x in BC1.split(',')]

现在你想要的数字是

numbers[0] == a # 17899792270101010000000000
numbers[1] == b # 17899792270102010000000000
numbers[2] == c # 17899792270103010000000000
  • split 函数创建一个数字数组,但包括空格和引号。

    ["'17899792270101010000000000'", " '17899792270102010000000000'", " '17899792270103010000000000'"]

  • strip 函数去掉了空格和引号

    ['17899792270101010000000000', '17899792270102010000000000', '17899792270103010000000000']

  • int 函数将字符串解析为整数(数字)

    [17899792270101010000000000, 17899792270102010000000000, 17899792270103010000000000]

但是,这要求用户遵循您指定的格式。 Foryah's answer 对不同的输入格式更加健壮。

【讨论】:

  • 非常感谢您的努力,这完全适合我提到的情况。我也会检查 Foryah 的答案。
【解决方案3】:

如果它在输入端已经“格式化”了:

>>> BC1 = input("BC1: ")
BC1: '17899792270101010000000000', '17899792270102010000000000', '17899792270103010000000000'
>>> a=int(BC1[0])
>>> b=int(BC1[1])
>>> c=int(BC1[2])
>>> a
17899792270101010000000000
>>> b
17899792270102010000000000
>>> c
17899792270103010000000000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多