Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字符串中的转义正则表达式特殊字符_Python_Regex_String_Escaping - Fatal编程技术网

Python字符串中的转义正则表达式特殊字符

Python字符串中的转义正则表达式特殊字符,python,regex,string,escaping,Python,Regex,String,Escaping,Python是否有一个函数可以用来转义正则表达式中的特殊字符 例如,我“卡住了”:\应该变成我“卡住了”:\使用 在此重复: 关于转义(字符串) 返回所有非字母数字反斜杠的字符串;如果要匹配可能包含正则表达式元字符的任意文字字符串,这将非常有用 从Python 3.7开始,escape()已更改为仅转义对正则表达式操作有意义的字符。这并不难: def escapeSpecialCharacters ( text, characters ): for character in charac

Python是否有一个函数可以用来转义正则表达式中的特殊字符

例如,
我“卡住了”:\
应该变成
我“卡住了”:\

使用

在此重复:

关于转义(字符串)

返回所有非字母数字反斜杠的字符串;如果要匹配可能包含正则表达式元字符的任意文字字符串,这将非常有用

从Python 3.7开始,escape()已更改为仅转义对正则表达式操作有意义的字符。

这并不难:

def escapeSpecialCharacters ( text, characters ):
    for character in characters:
        text = text.replace( character, '\\' + character )
    return text

>>> escapeSpecialCharacters( 'I\'m "stuck" :\\', '\'"' )
'I\\\'m \\"stuck\\" :\\'
>>> print( _ )
I\'m \"stuck\" :\
使用repr()[1:-1]。在这种情况下,不需要转义双引号。[-1:1]片段将从开头和结尾删除单个引号

>>> x = raw_input()
I'm "stuck" :\
>>> print x
I'm "stuck" :\
>>> print repr(x)[1:-1]
I\'m "stuck" :\\
或者你只是想逃避一个短语粘贴到你的程序中?如果是,请执行以下操作:

>>> raw_input()
I'm "stuck" :\
'I\'m "stuck" :\\'

我很惊讶没有人提到通过
re.sub()
使用正则表达式:

需要注意的重要事项:

  • 搜索模式中,包括
    \
    以及要查找的字符。 您将使用
    \
    转义字符,因此需要转义 那也是
  • 搜索模式周围加上括号,例如
    ([\“])
    ,以便替换 模式可以在前面添加
    \
    时使用找到的字符
    \1
    执行:使用第一个括号中的组的值。)
  • r'([\“])前面的
    r
    表示它是一个原始字符串。原始字符串使用不同的 避开反斜杠的规则。要将
    ([\“])
    作为普通字符串编写,您需要 将所有反斜杠加倍,然后写入
    '([\\“])'
    。使用原始字符串时更友好 你在写正则表达式
  • 替换模式中,您需要转义
    \
    ,以将其与 替换组前面的反斜杠,例如
    \1
    ,因此
    r'\\\1'
    。写 作为一个普通的字符串,您需要
    “\1”
    -没有人想要这样

如上所述,答案取决于您的情况。如果要对正则表达式的字符串进行转义,则应使用re.escape()。但如果要转义一组特定的字符,请使用此lambda函数:

>>> escape = lambda s, escapechar, specialchars: "".join(escapechar + c if c in specialchars or c == escapechar else c for c in s)
>>> s = raw_input()
I'm "stuck" :\
>>> print s
I'm "stuck" :\
>>> print escape(s, "\\", ['"'])
I'm \"stuck\" :\\

如果您只想替换某些字符,可以使用以下方法:

import re

print re.sub(r'([\.\\\+\*\?\[\^\]\$\(\)\{\}\!\<\>\|\:\-])', r'\\\1', "example string.")
重新导入
打印re.sub(r'([\.\\+\*\?\[\^\]\$\(\)\{\\\\\!\\\\\\\\\\:\-]),r'\\\1',“示例字符串”。)

你认为什么是一个特殊的角色?完全取决于你的背景。如果反斜杠是
字符之一
最好是第一个,则这些字符在字符串中通常是完全正确的!如果字符串是unicode,则这不起作用,因为在python3.4中,所有字符串都是unicode,您将有u,并且应该运行
repr(x)[2:-1]
,不幸的是,这似乎根本不起作用。相反,
print(repr(“我卡住了”)[1:-1])
prints
I卡住了
。您可以使用regex模块而不是re。例如
regex.escape(模式、字符串、仅特殊字符=True
>>> escape = lambda s, escapechar, specialchars: "".join(escapechar + c if c in specialchars or c == escapechar else c for c in s)
>>> s = raw_input()
I'm "stuck" :\
>>> print s
I'm "stuck" :\
>>> print escape(s, "\\", ['"'])
I'm \"stuck\" :\\
import re

print re.sub(r'([\.\\\+\*\?\[\^\]\$\(\)\{\}\!\<\>\|\:\-])', r'\\\1', "example string.")