Python 正则表达式如何处理多个反斜杠\

Python regular expression how to deal with multiple back slash \

我正在处理文本数据并且在擦除多个反斜杠时遇到问题。 我发现使用 .sub 效果很好。所以我编码如下来擦除反斜杠+r n t f v

temp_string = re.sub(r"[\t\n\r\f\v]"," ",string)

但是上面的代码无法处理下面的字符串

string = '\\r \\nLove the filtered water and crushed ice in the door.'

所以编码为:

temp_string = re.sub(r"[\\t\\n\\r\\f\\v]"," ",string)
temp_string

但是它显示的结果是这样的..

不知道为什么会这样

正在擦除所有 v、f、n 等等..

我发现使用 .replace(“\\r”,” ”) 有效! 不过,这样的话,我应该会喜欢..

.replace(“\\r”,” ”)

.replace(“\\r”,” ”)

.replace(“\r”,” ”)

.replace(“\r”,” ”)

.replace(“\\t”,” ”)

…

我很确定会有更好的方法..

不能在一个字符内定义一系列字符 class。字符 classes 用于匹配单个字符。因此,[\\t\\n\\r\\f\\v] 等于 [\tnrfv] 并匹配反斜杠或 tnrfv 字母.

要匹配一系列字符,您需要一个一个地使用它们。要匹配 \n two-char 字符串,您需要使用 \n 模式 (r'\n')。如果您需要匹配 \n\v 文本,您需要使用 \n|\v(?:\n|\v) 或更好的 \[nv].

因此,如果您想要匹配反斜杠后跟来自 rtnfv 字符集的字母,或 "\t" (TAB)、"\n"(换行符)、"\r"(回车 return)、"\f"(换页)或 "\v"(垂直制表符)字符,您可以使用

r'\[rtnfv]|[\t\n\r\f\v]'
r'(?:\[rtnfv]|[\t\n\r\f\v])'
r'(?:\[rtnfv]|[\t\n\r\f\v])+'

最后一个匹配一个或多个连续出现的模式,这些模式可能会相互混合。

由于转义字符与前面带有反斜杠的字符不同,您需要为要替换的转义字符定义一个映射。

string = '\\r \\\nLove the \nfiltered \twater \and crushed ice in the door.'

esc_map = {'\n': '\n',
           '\t': '\t',
           '\r': '\r'}

# replace characters that should be escaped characters
for key, value in esc_map.items():
    string = string.replace(key, value)

# group escape character that might have backslashes prefixed 
re_str = r'\*({})'.format(r'|'.join(esc_map.values()))
# remove extra backslashes
string = re.sub(re_str,r'',string)
# replace an escape character with a space
string = re.sub(re_str,r' ',string)