【问题标题】:Regex Python extract digits between two strings in a single expression正则表达式 Python 在单个表达式中提取两个字符串之间的数字
【发布时间】:2017-11-17 13:25:55
【问题描述】:

我只希望两个字符之间存在数字以获得整数美元值,例如来自字符串:

"Advance [Extra Value of $1,730,555] in packages 2,3, and 5."

我们要获取"1730555"

我们可以使用\$(.*)\] 得到"1,730,555",但是我们如何去除同一个表达式中的逗号,同时保留任意多个逗号的可能性,理想情况下获取单个捕获组中的数字?

【问题讨论】:

  • 一个选项不要使用正则表达式删除逗号,使用replace(',','')
  • 只需链接.replace(',','')。正则表达式引擎在提取的同时无法执行替换。
  • 也许您可以阐明您需要在单个正则表达式匹配操作中完成此操作的原因 - 因为这很可能是不可能的。您不能将不连续的内容匹配到一个组中。

标签: python regex string digits


【解决方案1】:

你可以这样试试

import re
text = "Advance [Extra Value of $1,730,555] in packages 2,3, and 5."
match = re.findall(r'\$(.*)]',text)[0].replace(',','')
print match

【讨论】:

    【解决方案2】:

    您可以使用拆分和连接:

    import re
    
    s = "Advance [Extra Value of $1,730,555] in packages 2,3, and 5."
    
    match = re.findall(r'\$([\d,]+)', s)
    number = ''.join(match[0].split(','))
    print(number)
    

    【讨论】:

    • 您不会使用数字必须在[] 内的事实,对吧?
    • 对于这个例子,我提供的解决方案有效。我只是在使用数字前面有一个 $ 的事实。如果还有其他带有前导 $ 的数字不能返回,而只能返回额外包含在 [] 中的数字,则只需将正则表达式扩展为:'[.*\$([\d,]+)]'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多