b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

PYTHON正则表达式重新模块说明(2)

电脑杂谈  发布时间:2020-06-12 00:22:41  来源:网络整理

将一个固定字符串替换为另一个的示例;例如,您可以将“契约”替换为“单词”. re.sub()似乎是用于此功能的函数,但请考虑replace()方法. 请注意,replace()也可以用单词替换,可以将“ swordfish”更改为“ sededfish”,但是RE也可以完成Arrived. (为避免替换单词的一部分,该模式将写为\ bword \ b. 这要求在“单词”的两边都具有单词边界. 这是一项超出替换能力的工作. )

另一个常见任务是从字符串中删除单个字符或将其替换为另一个字符. 您也许可以执行re.sub('\ n','',S)之类的操作,但是translate()可以完成这两项任务,并且运算速度比任何正则表达式都要快.

简而言之,在使用re模块之前,请考虑是否可以使用更快,更简单的字符串方法解决您的问题.

The

match()函数仅检查RE是否在字符串开头匹配,而search()扫描整个字符串. 记住这一区别很重要. 请记住,match()仅报告成功的匹配,它将从0开始;如果匹配不是从0开始,则match()不会报告.

#!python
>>> print re.match('super', 'superstition').span()
(0, 5)
>>> print re.match('super', 'insuperable')
None

另一方面,search()将扫描整个字符串并报告找到的第一个匹配项.

python正则匹配_python正则匹配ip地址_python 正则匹配

#!python
>>> print re.search('super', 'superstition').span()
(0, 5)
>>> print re.search('super', 'insuperable').span()
(2, 7)

有时,您可能更喜欢使用re.match()并在RE前面添加. *. 请尽量不要这样做,最好使用re.search(). 正则表达式编译器将对RE进行一些分析,以便提高查找匹配项时的处理速度. 一个这样的分析机会表明比赛的第一个字符是什么;例如,模式Crow必须与“ C”匹配. 解析器可以使引擎快速扫描字符串以找到起始字符,并且只有在找到“ C”之后才开始匹配.

添加. *将使优化失败. 这需要扫描到字符串的末尾python 正则匹配,然后回溯以找到剩余RE的匹配项. 改用re.search().

当重复诸如a *之类的正则表达式时,运算的结果是匹配尽可能多的模式. 当您尝试匹配一对对称定界符(例如HTML标记中的尖括号)时,这一事实通常会打扰您. 匹配单个HTML标记的模式将无法正常工作,因为. *本质上是“贪婪的”

#!python
>>> s = '<html><head><title>Title</title>'
>>> len(s)
32
>>> print re.match('<.*>', s).span()
(0, 32)
>>> print re.match('<.*>', s).group()
<html><head><title>Title</title>

RE匹配“ ”中的“ <”,. *占用了子字符串的其余部分. 尽管>不能在字符串的末尾匹配,但请在RE中保留更多位置,因此正则表达式必须逐个字符地追溯,直到找到>的匹配项为止. 最终匹配是从“ ”中的““>”,这不是您想要的.

在这种情况下,解决方案是使用非贪婪限定符*?,+?,??或{m,n}?. 匹配尽可能小的文本. 在上面的示例中,在第一个“ <”之后立即尝试“>”. 失败时,引擎会一次添加一个字符,并在每个步骤“>”内重试. 此过程将获得正确的结果:

#!python
>>> print re.match('<.*?>', s).group()
<html>

请注意,使用正则表达式分析HTML或XML是很痛苦的. 混乱的模式将处理常见的情况,但是HTML和XML是特殊情况,显然会破坏正则表达式. 当您编写正则表达式以处理所有可能的情况时,模式将变得非常复杂. HTML或XML解析器可用于此类任务.

现在您可能会注意到正则表达式非常紧凑,但是很难阅读. 中度复杂的RE可能会成为反斜杠,括号和元字符的长集合,使其难以阅读.

在这些RE中,在编译正则表达式时指定re.VERBOSE标志很有帮助,因为它允许您编辑正则表达式格式以使其更清晰.

re.VERBOSE标志具有多个功能. 正则表达式中不在字符类中的空白字符将被忽略. 这表示像dog | cat与可读性差的cat |相同,但是[a b]会匹配字符“ a”,“ b”或空格. 另外,您也可以在RE中添加评论. 注释从“#”到下一行. 使用三引号引起来的字符串时,可以使REs格式更整洁:

#!python
pat = re.compile(r"""
\s*                 # Skip leading whitespace
(?P<header>[^:]+)   # Header name
\s* :               # Whitespace, and a colon
(?P<value>.*?)      # The header's value -- *? used to
# lose the following trailing whitespace
\s*$                # Trailing whitespace to end-of-line
""", re.VERBOSE)

这很难阅读:

#!python
pat = re.compile(r"\s*(?P<header>[^:]+)\s*:(?P<value>.*?)\s*$")

正则表达式是一个复杂的主题. 本文可以帮助您理解吗?这些部分不清楚吗?还是您在这里找到遇到的问题?如果是这种情况,请向作者发送建议以进行改进.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-242372-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...