【问题标题】:Python regex match numbers or nothingPython 正则表达式匹配数字或什么都没有
【发布时间】:2016-10-21 03:11:34
【问题描述】:

我有字符串:

第一个

\-1,1\N,0.0464128206,0.1106913625,-0.0261445305\

第二个

\-1,1\N,0.,0.,0.\

可以手动完成

 \-1,1\N,0.0,0.0,0.0\

但我试图让脚本在没有任何编辑的情况下工作

我的正则表达式是

\d,\d\\[A-Z],[-]?\d+.\d+,[-]?\d+.\d+,[-]?\d+.\d+

如何让 RegEx 在 \d+ 上工作,或者如果不存在就跳过它?

更新: 我想制作对两个字符串都适用的 RegEx。如果不存在,如何使这部分 '\d+.\d+' 跳过第二个 \d+? [\d+]?不工作。

【问题讨论】:

  • 你到底想达到什么目的?
  • 不清楚你想得到什么。如果给定字符串 1,您期望输出什么?与字符串 2 相同。
  • 请@Jivan,看看更新
  • 听起来你想要\d*(相当于(\d+)?)。
  • @XuMuK 好的,编辑确实更清晰

标签: python regex python-2.7 match


【解决方案1】:

.后面的部分从\d+改成\d*,像这样:

\d,\d\\[A-Z],[-]?\d+\.\d*,[-]?\d+\.\d*,[-]?\d+\.\d*

\d+\.\d*的解释是:

至少一位数字,然后正好是一个点,然后是零或一位或多位数字

请注意,我还将您的 . 更改为 \.. 表示任何字符)。

调试表达式链接:https://www.debuggex.com/r/nSKH3lbNr8opO09o

-- 更新

您的正则表达式可以简化为:

\d,\d\\[A-Z](?:,-?\d+\.\d*){3}

知道这个组重复了 3 次,它只是简单地分解了您的 ,\d+\.\d*。它还将[-] 更改为-,这样更干净。

(?: ... ){3} 语法表示非捕获组重复 3 次。

链接到更新的调试表达式:https://www.debuggex.com/r/Cni47UR71BCgpa2A

【讨论】:

  • 是的!这正是我一直试图得到的!并感谢您提供调试器链接!好的,我会记住的,这一点与任何单个字符一样。
  • @XuMuK 谢谢 - 我稍微更新了正则表达式,让它更简单、更干净
猜你喜欢
  • 2014-11-18
  • 2021-08-08
  • 2020-07-30
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多