正则表达式工作,但不是在Python?

时间:2016-12-19 12:31:21

标签: python regex

我有以下正则表达式:

.+?(=*)(myarray\()\{([\S| \|'.,]*)},\s*(\p{L}+)(.*\*\d+)

搜索此字符串并匹配此处显示的不同部分:

blahb.blah = myarray({-68,-67,-65,-62,-61,-59,-58,-56,-55,-53,-52,-51,-49,-48,-47,-46,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-29,-28,-27,-26,-26,-25,-24,-24,-23,-22,-22,-21,-21,-20,-20,-19,-19,-19,-18,-18,-18,-17,-17,-17,-16,-16,-16,-15,-15,-15,-14,-14,-14,-14,-13,-13,-13,-12,-12,-12,-11,-11,-11,-10,-10,-9.7,-9.4,-9.1,-8.8,-8.5,-8.2,-7.9,-7.5,-7.2,-6.9,-6.6,-6.3,-6,-5.7,-5.3,-5,-4.7,-4.4,-4.1,-3.8,-3.4,-3.1,-2.8,-2.5,-2.2,-1.9,-1.6,-1.2,-0.9,-0.6,-0.3,0,0.3,0.6,1,1.3,1.6,1.9,2.2,2.5,2.9,3.2,3.5,3.8,4.1,4.4,4.7,5.1,5.4,5.7,6}, x*456, 1);

https://regex101.com/r/frF0eC/7

然而,当我尝试在python中运行这个相同的正则表达式时,它不起作用。我想知道为什么?有没有关于python的东西与其他正则表达式系统不同?

以下是Python代码的示例:

import re
myarray = " blahb.blah = myarray({-68,-67,-65,-62,-61,-59,-58,-56,-55,-53,-52,-51,-49,-48,-47,-46,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-29,-28,-27,-26,-26,-25,-24,-24,-23,-22,-22,-21,-21,-20,-20,-19,-19,-19,-18,-18,-18,-17,-17,-17,-16,-16,-16,-15,-15,-15,-14,-14,-14,-14,-13,-13,-13,-12,-12,-12,-11,-11,-11,-10,-10,-9.7,-9.4,-9.1,-8.8,-8.5,-8.2,-7.9,-7.5,-7.2,-6.9,-6.6,-6.3,-6,-5.7,-5.3,-5,-4.7,-4.4,-4.1,-3.8,-3.4,-3.1,-2.8,-2.5,-2.2,-1.9,-1.6,-1.2,-0.9,-0.6,-0.3,0,0.3,0.6,1,1.3,1.6,1.9,2.2,2.5,2.9,3.2,3.5,3.8,4.1,4.4,4.7,5.1,5.4,5.7,6}, asd*456, 1); "

matchObj = re.search( r".+?(=*)(myarray\()\{([\S| \|'.,]*)},\s*(\p{L}+)(.*\*\d+)", myarray)

print matchObj
print "matchObj.group() : ", matchObj.group()
print "matchObj.group(1) : ", matchObj.group(1)
print "matchObj.group(2) : ", matchObj.group(2)

以下是Python脚本的在线示例:https://repl.it/EtP8/1

由于某种原因它正在搜索并返回None?知道为什么吗?

1 个答案:

答案 0 :(得分:2)

  1. 您的python代码有错误,haystack字符串包含" myarray"而你的正则表达式是"子阵列"

  2. re模块中的@Casimir中提到的Unicode字符类不存在,您可以相应地使用[a-zA-Z]或\w作为替换。

  3. 正在运行代码:http://ideone.com/kukNDw

    import re
    myarray = "blahb.blah = myarray({-68,-67,-65,-62,-61,-59,-58,-56,-55,-53,-52,-51,-49,-48,-47,-46,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-29,-28,-27,-26,-26,-25,-24,-24,-23,-22,-22,-21,-21,-20,-20,-19,-19,-19,-18,-18,-18,-17,-17,-17,-16,-16,-16,-15,-15,-15,-14,-14,-14,-14,-13,-13,-13,-12,-12,-12,-11,-11,-11,-10,-10,-9.7,-9.4,-9.1,-8.8,-8.5,-8.2,-7.9,-7.5,-7.2,-6.9,-6.6,-6.3,-6,-5.7,-5.3,-5,-4.7,-4.4,-4.1,-3.8,-3.4,-3.1,-2.8,-2.5,-2.2,-1.9,-1.6,-1.2,-0.9,-0.6,-0.3,0,0.3,0.6,1,1.3,1.6,1.9,2.2,2.5,2.9,3.2,3.5,3.8,4.1,4.4,4.7,5.1,5.4,5.7,6}, x*456, 1);"
    
    matchObj = re.search( r".+?(=*)(myarray\()\{([\S| \|'.,]*)},\s*(\w+)(.*\*\d+)", myarray)
    
    print matchObj
    print "matchObj.group() : ", matchObj.group()
    print "matchObj.group(1) : ", matchObj.group(1)
    print "matchObj.group(2) : ", matchObj.group(2)