替换Python中的空格和元字符

替换Python中的空格和元字符,python,regex,Python,Regex,我有这样一个字符串: str1 = "/path/happy (dog)" 出于某种目的,我希望它像: str2 = "/path/happy\ \(dog\)" 我试过使用re: str1 = "happy (dog)" tuple_1 = ('\s+','(',')') for i in tuple_1: match = re.search(r"("+i+")",str1) if match: str1 = re.sub(match.group(),"\\

我有这样一个字符串:

str1 = "/path/happy (dog)"
出于某种目的,我希望它像:

str2 = "/path/happy\ \(dog\)"
我试过使用re:

str1 = "happy (dog)"
tuple_1 = ('\s+','(',')')


for i in tuple_1:

   match = re.search(r"("+i+")",str1)

   if match:
      str1 = re.sub(match.group(),"\\"+match.group(),str1)

print str1
但它给出了错误:

sre_constants.error: unbalanced parenthesis

我知道我在这里遗漏了什么…

您需要转义任何特殊字符,如括号:

tuple_1 = (r'\s+', r'\(', r'\)')

否则,它们将被解释为正则表达式字符。

您需要转义任何特殊字符,如括号:

tuple_1 = (r'\s+', r'\(', r'\)')
否则,它们将被解释为正则表达式字符。

当i为“(”时,生成的正则表达式将为“(()”。两个开括号和一个结束符。因此,错误消息为“不平衡括号”

必须对元组_1中的两个括号进行转义:

tuple_1 = (r'\s+', r'\(', r'\)')
当i为“(”时,生成的正则表达式将为“(()”。两个开括号和一个闭括号。因此会出现错误消息“不平衡括号”

必须对元组_1中的两个括号进行转义:

tuple_1 = (r'\s+', r'\(', r'\)')

即使您应用了其他答案(转义元组中的搜索词)中提到的更改(这是有效且重要的),您仍然会得到一个

Traceback (most recent call last):
  File "<pyshell#4>", line 6, in <module>
    str1 = re.sub(match.group(),"\\"+match.group(),str1)
error: unbalanced parenthesis
另一方面,我们可以只编译一次模式,然后记住它 所以

最后的代码是:

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\\\)'

即使你应用了其他答案中提到的更改(转义元组中的搜索词),这是有效且重要的,你仍然会得到一个

Traceback (most recent call last):
  File "<pyshell#4>", line 6, in <module>
    str1 = re.sub(match.group(),"\\"+match.group(),str1)
error: unbalanced parenthesis
另一方面,我们可以只编译一次模式,然后记住它 所以

最后的代码是:

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\\)'

你必须在正则表达式中转义括号。你搜索过错误消息吗?你必须在正则表达式中转义括号。你搜索过错误消息吗?非常感谢Sam。它工作得很好。尽管输出是'/path/happy\\(dog\)“这是我真正想要的。非常感谢Sam。它工作得非常好。尽管输出是我真正想要的”/path/happy\\(dog\)”。