仅匹配第一个变量和值

时间:2016-05-17 07:06:12

标签: python regex

  1. x =" WID 0.12;"
  2. x =" WID 0 0.12 0.12 0.12 0.12"
  3. x =" WID 0.2 0.4 0.8 1.6 5;"
  4. 我希望我的正则表达式仅在x中存在re.match时才匹配。否则,if re.match("\s+WID\s[(\d+)\.(\d+)]", x): print x 应返回0(即不匹配)。

    我使用以下内容:

    SVG

    这将返回所有条件1,2,3的匹配。你能帮助我使用只返回第一个匹配的表达式和其他匹配的表达式吗?

4 个答案:

答案 0 :(得分:2)

您只想知道"WID 0.12 ;"是否在x

使用re.match就像使用火箭筒杀死苍蝇一样(而且它很慢)。

这就足够了:

if "WID 0.12 ;" in x:
  print x

修改:

由于数值不是必需的" 0.12" (根据下面的评论),使用正则表达式是合理的。这应该有效:

if re.match(" *WID \d+.\d+ ;",x):
  print x

答案 1 :(得分:1)

正如我在评论中所说,正确的正则表达式是re.match(".*WID\s(0)\.(12).*", x)(具有匹配的组)或re.match(".*WID\s0\.12.*", x)(没有匹配的组)。

如果您想匹配任何数字组合,可以使用re.match(".*WID\s(\d)\.(\d).*", x)

然而,正如Tibo所说,你可以用

来做
if "WID 0.12" in x:
    print x

但这可能会给0.12x

带来误报

答案 2 :(得分:1)

捕获组周围的方括号会导致错误(以及放置WIDTH而不是WID的事实)

你的正则表达式应该是:

  

WID \ S(\ d +)。(\ d +)

答案 3 :(得分:1)

感谢您的意见和建议。我将在下一篇文章中处理细节,这会导致与某些人混淆。

感谢cromod(我做的小修改)

if re.match("\sWID\s(\d+).(\d+) ;", x):

   print x

这很有效。

相关问题