【问题标题】:Extracting the integers enclosed in square brackets提取方括号中的整数
【发布时间】:2020-02-10 07:39:06
【问题描述】:

我正在尝试使用 Python 中的正则表达式从字符串中提取整数。因此,数字和括号之间可以有空格,但除了构成整数的字符之外,没有其他字符。我的代码如下:


import re
s = "  afd [asd] [12 ] [a34]  [ -43 ]tt [+12]xxx"
print(re.findall(r"\s+\[\w+\]\s\[(\d+)\s\]\s\[\w+\]\s+\[\s(-\d+)\s\]\w+\s\[\+(\d+)\]\w+",s))

以上代码打印:


[('12', '-43', '12')]

但是,我希望输出不是元组的形式,也不是上述情况下的三元组,而是像这样的列表:


[12, -43, 12]

【问题讨论】:

  • 你有没有尝试研究如何在 python 中将字符串转换为数字?
  • 所以您的问题是“如何将单个元组的列表转换为列表”,或者“如何展平嵌套列表/元组”?
  • 我得到了回答,但是,根据情况,您的第二个问题在这里看起来更合乎逻辑。我应该问“如何展平嵌套列表/元组”?

标签: python regex python-3.x string list


【解决方案1】:

您可以通过以下方式做到这一点:

import re
s = "  afd [asd] [12 ] [a34]  [ -43 ]tt [+12]xxx"
rv = re.findall(r"\s+\[\w+\]\s\[(\d+)\s\]\s\[\w+\]\s+\[\s(-\d+)\s\]\w+\s\[\+(\d+)\]\w+",s)
lst = [int(x) for t in rv for x in t]

这将遍历rv 中的所有元组并将每个整数添加到一个新列表lst。这种情况下的输出是:

>>> lst
[12, -43, 12]

【讨论】:

    【解决方案2】:

    匹配值的另一个选项可能是缩短模式并使用re.findall

    \[\s*\+?(-?\d+)\s*\]
    

    Regex demo | Python demo

    例如

    import re
    
    regex = r"\[\s*\+?(-?\d+)\s*\]"
    test_str = "afd [asd] [12 ] [a34]  [ -43 ]tt [+12]xxx"
    
    print(re.findall(regex, test_str))
    

    输出

    ['12', '-43', '12']
    

    【讨论】:

    • 谢谢您,您的解决方案有效并帮助我找到了正确的方向,但是,在一些非常相似的情况下它失败了:test_str = "afd [128+] [47] [a34] [ +-43 ]tt [+12]xxx!”在这个字符串中,您建议的正则表达式也将打印 -43,但规则是,数字和括号之间可以有空格,但除了构成整数的字符之外,没有其他字符。这里,在“[”之后,在“[”和“-43”之间有一个“+”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多