2016-12-19 28 views
-2

私は、次の正規表現している。さまざまな部分をこの文字列を検索し、一致したregexは動作しますが、Pythonでは動作しませんか?

.+?(=*)(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について何かありますか?

HERESにPythonコードの例:それは検索やNoneを返すされていないいくつかの理由https://repl.it/EtP8/1

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スクリプトのオンライン例ですか?どんな考え?

+1

選択regex101におけるフレーバー= Pythonとあなたはそれがどちらかが仕事doesntのことがわかります。私は理由を知らないが、それはあなたがエラーを見つけるのに役立ちます。 – Cleared

+3

reモジュールに '\ p {L}'のようなUnicode文字クラスがありません。このクラスが本当に必要な場合は、代わりにregexモジュールを使用してください。 (そうでない場合は '[a-zA-Z]'に置き換えてください) –

答えて

2
  1. あなたのPythonコードにエラーがある、干し草の山の文字列は、コメントで@Casimirで述べたように

  2. Unicode文字クラスはreモジュールに存在しない「部分配列」としてあなたの正規表現に対し、「myarrayの」が含ま代わりに[a-zA-Z]または\wを使用することができます。

実行コード: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) 
+0

大変ありがとうございました –

関連する問題