コードの反復#2
stringVar = r'string'
うまく機能したを使用してvar1を生の文字列に変更します。以下のコードで、次の例外が発生します。
Traceback (most recent call last):
File "regex_test.py", line 8, in <module>
pattern = re.compile(var2 + "(.*)")
File "/usr/lib/python2.7/re.py", line 190, in compile
return _compile(pattern, flags)
File "/usr/lib/python2.7/re.py", line 242, in _compile
raise error, v # invalid expression
sre_constants.error: unbalanced parenthesis
-
#!/usr/bin/python
import re
var1 = r'\\some\String\to\Match'
var2 = '\\\\some\\String\\'
pattern = re.compile(var2 + "(.*)")
found = pattern.match(var1, re.IGNORECASE)
if found:
print "YES"
else:
print "NO"
正規表現に変数を含めようとしています。この質問はこの他の質問に関連していますが、コンパイルされたパターンと一致内の変数を使用することによってわずかに異なります。私が読んだすべてによれば、以下のサンプルコードは機能するはずです。
#!/usr/bin/python
import re
var1 = re.escape('\\some\String\to\Match') # A windows network share
var2 = "\\\\some\\String\\"
print var1 # Prints \\some\\String\ o\\Match
print var2 # Prints \\some\String\
pattern = re.compile(var2)
found = pattern.match(var1 + "(.*)", re.IGNORECASE)
if found:
print "YES"
else:
print "NO"
変数を出力すると、奇妙な動作が見られます。re.escapeは、文字列内の必要なすべての文字をエスケープすると思いました。
Ubuntu12.4.1でPython2.7のコードを実行すると、次の例外が発生します
Traceback (most recent call last):
File "regex_test.py", line 11, in <module>
pattern = re.compile(var2)
File "/usr/lib/python2.7/re.py", line 190, in compile
return _compile(pattern, flags)
File "/usr/lib/python2.7/re.py", line 242, in _compile
raise error, v # invalid expression
sre_constants.error: bogus escape (end of line)
例外がスローされる原因となっている何が欠けていますか?