如何在Python正则表达式中转义任何特殊字符?

如何在Python正则表达式中转义任何特殊字符?

正则表达式通常被称为regexp,是一种强大的工具,可用于在处理文本文件时查找和操作文本字符串。与使用几百行计算机代码相比,使用正则表达式只需要一行即可轻松完成替换。

所有脚本语言,包括PerlPythonPHPJavaScript,以及像Java这样的通用编程语言甚至包括处理器像Word,都支持用于文本搜索的正则表达式。正则表达式的语法非常复杂,学习起来可能会有一些困难,但这肯定是值得投入时间学习的。

特殊字符

当包含特殊字符时,文本处理变得更具挑战性,因为必须仔细考虑上下文。当查看使用正则表达式的Python代码时,必须考虑你所见的、Python所见的和正则表达式引擎所见的内容。Python可能会认为某个字符是唯一的,而正则表达式可能不会,反之亦然。

本文描述了一个在不同情况下处理特殊字符的具体示例。

解决TeX字符的问题

我们最近需要一个正则表达式来转义TeX的特殊字符。为了使TeX识别下划线作为一个下标命令和一个具体的下划线,我们需要将文本I CD9 CODE转换为ICD9 CODE。

TeX比下划线还有更多的特殊字符。它有10个独特的字符 −

\ { } $ & # ^ _% ~
Bash

因为它们在日常语言中非常常见,所以$和%可能是最容易出错的两个字符。如果不转义导入一个百分号,它将会静默地失败,因为在TeX中,%表示一个注释的开头。结果是语法上正确的,简单说,就是它表示了其余的句子的结尾。

正则表达式中的反斜杠(\)表示以下情况之一 −

  • 根据下一个部分中的表格,接下来是独特的字符。例如,符号b、t和x020表示正则表达式匹配应从单词边界、制表符和空格开始。

  • 任何被认为是语言结构的字符都应当被视为字面量。例如,量词的定义以大括号()开头,但是如果正则表达式引擎匹配到了它后面跟着一个反斜杠(),那么它应该匹配这个大括号。类似地,反斜杆(/)表示转义语言构造的开始,但是两个反斜杠()表示正则表达式引擎匹配反斜杆。

原生字符串

在这种情况下,有些有趣的特定于TeX的字符并不特定于Python。反斜杠也是两者都特定的。正则表达式也对反斜杠有特殊的处理方法。Python通过在引号前面使用r前缀来表示这是一个“原生”字符串,并且反斜杠不应该有特别的处理方法。它表达了一个以两个反斜杠开头的字符串。

为什么要使用两个反斜杠?为什么不只使用一个?在正则表达式中,反斜杠是特殊的,我们将在这个字符串中使用它。很快,我们会讲到更多。

解决方案

对于正则表达式模式,答案是利用Python的原生字符串表示法;在以“r”为前缀的字符串字面量中,反斜杠不会被特别处理。因此,“r”\n“是一个由字母""和"n"组成的两个字符的字符串,而"\n"是一个包含换行符的一个字符的字符串。Python程序通常使用这种原生字符串表示法来表达模式。

语法

line = r"\字符串"
Bash

r”\字符串”将句子读为原生字符串,"\r"是一个回车符。

示例1

#导入re库
import re
#使用转义方法来转义特殊字符
re.escape(r'\ a.*')
'\\ a\.\*\$'
#打印转义的字符
print(re.escape(r'\ a.*'))
Bash

输出

\ a\.\*\$
Bash

示例2

#导入re库
import re
#使用转义方法来转义特殊字符
re.escape('www.stackoverflow.com')
'www\.stackoverflow\.com'
#打印转义的字符
print(re.escape('www.stackoverflow.com'))
Bash

输出

www\.stackoverflow\.com
Bash

代码解释

  • 我们的向后查找表达式由于我们要搜索唯一字符而变得更加复杂。一个\,是我们正在寻找的唯一字符,对于正则表达式来说,是一个特殊的字符。

  • 我们在确保没有反斜杠并检查后面是否有一个之后,才搜索我们的特殊字符。为了让正则表达式引擎识别两个反斜杠并将它们解释为一个反斜杠字面值,我们在声明特殊变量时使用了两个反斜杠。

  • 我们希望指示re.sub在最初的捕获之前使用反斜杠。我们传递它\,以表示字面反斜杠,因为正则表达式引擎对待反斜杠有不同的方式。 当我们在传递\1以表示最初捕获时,结果与之前相同。

结论

反斜杠()在正则表达式中有两个功能:对于元字符,如d(数字),D(非数字),s(空格),S(非空格),w(字),以及W(非字),它表示它们的原义字符。为了避免在正则表达式中使用特殊的regex字母,例如.用于.,+用于+,用于,而?用于?,您还必须使用关键字“for”来避免歧义。此外,regex了解n表示换行,t表示制表符等。请注意,在Python中的字符串中,反斜杠字符()也用于转义序列。例如, “\n” 表示新行,“\t”表示制表符,您还必须写“”以表示\.因此,在这些语言中,您必须写两个级别的转义(!)来编写regex模式(匹配一个 )。相应的regex元字符\d表示等同于。\d。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册