我有一个字符串
a = "hello i am stackoverflow.com user +-"
现在我想转换除引号和空格之外的字符串中的转义字符。所以我的预期输出是:
a = "hello i am stackoverflow\.com user \+\-"
到目前为止我所做的是找到字符串中的所有特殊字符,除了空白和使用
的双引号re.findall(r'[^\w" ]',a)
现在,一旦我找到所有必需的特殊字符,我想更新字符串。我甚至试过re.sub
但它取代了特殊字符。无论如何我能做到吗?
答案 0 :(得分:3)
使用re.escape
。
>>> a = "hello i am stackoverflow.com user +-"
>>> print(re.sub(r'\\(?=[\s"])', r'', re.escape(a)))
hello i am stackoverflow\.com user \+\-
re.escape(字符串)
返回字符串,所有非字母数字反向;如果要匹配可能包含正则表达式元字符的任意文字字符串,这非常有用。
r'\\(?=[\s"])'
匹配之前存在于空格或双引号之前的所有反斜杠。用空字符串替换匹配的反斜杠将为您提供所需的输出。
或强>
>>> a = 'hello i am stackoverflow.com user "+-'
>>> print(re.sub(r'((?![\s"])\W)', r'\\\1', a))
hello i am stackoverflow\.com user "\+\-
((?![\s"])\W)
捕获所有非单词字符,但不捕获空格或双引号。用组索引1中的反斜杠+字符替换匹配的字符将为您提供所需的输出。
答案 1 :(得分:3)
您似乎可以使用re.sub
的反向引用来实现所需的输出:
import re
a = "hello i am stackoverflow.com user +-"
print re.sub(r'([^\w" ])', r'\\\1', a) # hello i am stackoverflow\.com user \+\-
替换模式r'\\\1'
只是\\
,这意味着文字反斜杠,后跟\1
,这意味着捕获组1,即第一个参数中括号中捕获的模式。
换句话说,除了:
之外,它将逃脱一切