【问题标题】:Regex to get number after matched pattern正则表达式在匹配模式后获取数字
【发布时间】:2017-03-31 03:20:38
【问题描述】:

我创建了一个正则表达式模式来匹配以下内容:

'x': 10.61                # Any number, can be negative

正则表达式'x':\s[-+]?\d*\.*\d+

但是,我想只获得数字,因此尝试了以下操作:

re.findall("'x':\K\s[-+]?\d*\.*\d+", info)

但据我了解,\K 在 python 上不起作用。

是否有任何替代可以匹配例如:10.61 only?

【问题讨论】:

  • 您可以将您的号码存储到捕获组中并访问它。
  • 如果 \K 按您希望的方式工作,它会做什么?
  • @Robᵩ in PCRE(和其他风格) \K 是匹配重置,从匹配中省略之前匹配的所有内容。
  • 在我看来,与\K 最接近的功能匹配是positive lookbehind assertion(?<='x':)\s[-+]?\d*\.\d+

标签: python regex python-2.7


【解决方案1】:

re.match()函数使用以下方法:

info = "'x': 10.61"
m = re.match(r"'x':\s*?([+-]?\d+([.]\d+)?)", info)
num = m.group(1)
print(num)  # 10.61

【讨论】:

    【解决方案2】:

    如果您的输入始终为some char: wanted num,您可以通过分隔符: 拆分返回的字符串,然后从位置一的返回列表中获取字符串。

    result = re.findall("'x':\s[-+]?\d*\.*\d+", info)
    digits = [ i.split(":")[1] for i in result ]
    

    【讨论】:

      【解决方案3】:

      这应该可行:

      info = "'x': 10.61"
      items = re.findall("'x':\s([-+]?\d*\.*\d+)", info)
      print(items[0]) # 10.61
      

      【讨论】:

      • 太好了!奇迹般有效!一个解释会更好:) 谢谢。
      • 正则表达式几乎和你的一样,但我得到了 parentesies () 中的数字,所以当正则表达式执行时,每个括号都被捕获在数组中。因此,第一个元素将是 items[0],如果存在,第二个括号将是 items[1],依此类推。
      • 太棒了!再次感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多