如何使用正则表达式在Python中查找模式时转义\triangle、\bold等

如何使用正则表达式在Python中查找模式时转义\triangle、\bold等,python,regex,re,Python,Regex,Re,我有一个字符串,它是这样的: \triangle \bold \new \regex 我使用了(re.findall(r“\\\w+”,s),但它没有给我结果,因为它显然无法识别\t、\b等我想要的方式。我如何转义这些字符 我正在使用变量来存储字符串,因此我不能s=r'\triangle\bold'。我使用repr('\triangle\bold')作为解决方法,但它给了我'\\triangle','\\x08oldsymol' 这些情况的出路是什么 像\\triangle、\\bold或\t

我有一个字符串,它是这样的:

\triangle \bold \new \regex
我使用了
(re.findall(r“\\\w+”,s)
,但它没有给我结果,因为它显然无法识别
\t、\b
等我想要的方式。我如何转义这些字符

我正在使用变量来存储字符串,因此我不能
s=r'\triangle\bold'
。我使用
repr('\triangle\bold')
作为解决方法,但它给了我
'\\triangle','\\x08oldsymol'

这些情况的出路是什么


\\triangle、\\bold
\triangle、
之类的东西都是我所期待的。不确定这是否只是一个解决方法,但您可以从头开始重建字符串。尝试以下方法:

>>> txt = r"\triangle \bold \new \regex"   #Notice the leading r
>>> txt
'\\triangle \\bold \\new \\regex'
>>> txt.split('\\')
['', 'triangle ', 'bold ', 'new ', 'regex']
import re

string = "\triangle \bold \new \regex"


escape_dict = {
    '\a' : r'\a',
    '\b' : r'\b',
    '\c' : r'\c',
    '\f' : r'\f',
    '\n' : r'\n',
    '\r' : r'\r',
    '\t' : r'\t',
    '\v' : r'\v',
    '\'' : r'\'',
    '\"' : r'\"'
}

def raw(string):
    new_string = ""
    for char in string:
        try: 
            new_string += escape_dict[char]
        except KeyError: 
            new_string += char
    return new_string

matches = re.findall(r"\\\w+", raw(string))
print(matches)

但是,我想看看您是否可以在代码的前面更改一些内容。

不确定这是否只是一个解决方法,但您可以从头开始重新生成字符串。尝试以下操作:

import re

string = "\triangle \bold \new \regex"


escape_dict = {
    '\a' : r'\a',
    '\b' : r'\b',
    '\c' : r'\c',
    '\f' : r'\f',
    '\n' : r'\n',
    '\r' : r'\r',
    '\t' : r'\t',
    '\v' : r'\v',
    '\'' : r'\'',
    '\"' : r'\"'
}

def raw(string):
    new_string = ""
    for char in string:
        try: 
            new_string += escape_dict[char]
        except KeyError: 
            new_string += char
    return new_string

matches = re.findall(r"\\\w+", raw(string))
print(matches)

但是,我想看看您是否可以在代码的前面更改一些内容。

您提到您正在使用变量
s
来存储字符串,并且您没有在其中使用
r
前缀。因此有一个问题。如果您的stri中有
\u
\x
\u
\N
ng然后将引发一个
SyntaxError
。 例如:

>>> s = 'There is no way o\ut'
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 17-18: truncated \uXXXX escape
>>> s = 'Cross symbol(\x) says it is wrong'
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 13-14: truncated \xXX escape
>>> s = 'What an escape Seque\Nce'
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 20-21: malformed \N character escape
>>> s = 'What an escape Seq\Uence'
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 18-20: truncated \UXXXXXXXX escape

您已经提到,您正在使用变量
s
存储字符串,但没有在其中使用
r
前缀。因此,存在一个问题。如果字符串中有
\u
\x
\u
\N
,则会引发
语法错误。
例如:

>>> s = 'There is no way o\ut'
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 17-18: truncated \uXXXX escape
>>> s = 'Cross symbol(\x) says it is wrong'
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 13-14: truncated \xXX escape
>>> s = 'What an escape Seque\Nce'
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 20-21: malformed \N character escape
>>> s = 'What an escape Seq\Uence'
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 18-20: truncated \UXXXXXXXX escape

你想要的结果是什么?@imraklr我已经更新了想要的结果。你想要的结果是什么?@imraklr我已经更新了想要的结果。注意,他在问题中说,他不能只将字符串定义为原始的,这正是你所做的。你是对的。但是,我不明白他为什么不能。问题是,一旦字符串被定义为原始的caped,当您取消转义时,退格字符
\b
仍然是转义的。他正在处理一个已经转义的字符串。@daktoad正是我的意思。我的字符串在变量中。有没有办法使它们在变量中变为原始的?我必须使用regex live,所以手动定义它们为原始的根本不是一个选项de可能会回答这个问题,提供关于如何和/或为什么解决问题的附加上下文,以提高答案的长期价值。注意他在问题中说,他不能只将字符串定义为原始值,这正是你所做的。你是对的。但是,我不明白他为什么不能。问题是一旦字符串是转义的,当您取消转义它时,退格字符
\b
仍然是转义的。他正在处理一个已经转义的字符串。@daktoad这正是我的观点。我的字符串在变量中。有没有办法使它们在变量中变为原始的?我必须使用regex live,所以手动定义它们为原始的根本不是一个选项is代码可以回答这个问题,提供关于它如何和/或为什么解决问题的附加上下文,从而提高答案的长期价值。