有効で重要な他の回答で言及されている変更を適用しても(タプル内の検索語をエスケープします)、それでも
Traceback (most recent call last):
File "<pyshell#4>", line 6, in <module>
str1 = re.sub(match.group(),"\\"+match.group(),str1)
error: unbalanced parenthesis
しかし、今回は別の行で。したがって、正規表現のサブ関数を使用する場合、最初のパラメーターは有効な正規表現である必要があります。match.group()
何でもかまいませんし、必ずしもバランスが取れているとは限りません。これは、正規表現が窒息している場所です。したがって、から文字列を取得してmatch.group()
エスケープできるため、リテラルを検索しています。これにより、行を次のように変更します
str1 = re.sub(re.escape(match.group()),"\\"+match.group(),str1)
一方、パターンを 1 回コンパイルするだけで、それを覚えておくことができます。
pattern = re.compile(r"("+i+")")
str1 = re.sub(pattern,"\\"+match.group(),str1)
最終的なコードは次のとおりです。
str1 = "/path/happy (dog)"
tuple_1 = (r'\s+', r'\(', r'\)')
for i in tuple_1:
pattern = re.compile(r"("+i+")")
match = pattern.search(str1)
if match:
str1 = re.sub(pattern,"\\"+match.group(),str1)
str1 は現在'/path/happy\\ \\(dog\\)'