如何使用正则表达式在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代码可以回答这个问题,提供关于它如何和/或为什么解决问题的附加上下文,从而提高答案的长期价值。