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]
并匹配反斜杠或 t
、n
、r
、f
或 v
字母.
要匹配一系列字符,您需要一个一个地使用它们。要匹配 \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)
我正在处理文本数据并且在擦除多个反斜杠时遇到问题。 我发现使用 .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]
并匹配反斜杠或 t
、n
、r
、f
或 v
字母.
要匹配一系列字符,您需要一个一个地使用它们。要匹配 \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)