正则表达式快速入门参考

Intro

虽然在为VyOS写python-vyos-mgmt的时候已经被提醒过一定要学正则表达式,不过一直没空去学,然后今天准备去看看BotVS的资料的时候就看到有则关于正则的资料,遂趁开例会时的空闲时间快速入门了一把。虽然用bash的时候经常用*来rm,但是更复杂的基本不会用了。

资料

这个cheat sheet包含了绝大多数的使用方式:

更详细的文档可以参考这里:

cheatsheet

然后为了方便测试自己的正则表达式是否正确,推荐一个国人编写的运行在.Net的图形化工具Regester,最后更新在2017年6月:

Regester

他也推出了一个30分钟入门教程(虽然可能不止30分钟):

30分钟入门

不过我觉得如果不借助任何工具去学的话还是这个人的教程比较适合,他把能匹配的字符串都按代码格式显示方便理解:

入门

进阶

我觉得比较重要的内容

  1. 一个”.”只能匹配一个字符,N个”.”能匹配N个

  2. “\”各领域都很常见的转义字符

  3. “K[abc]T”只能匹配一个长度为3的,含abc任意“一个”字符的字符串,”KabT”无法被匹配,而使用这个模式可以匹配”KabT”:K[\w]*T

  4. “{m}”匹配前一个字符串m次,比如”a{2}b”,如果目标字符串为”aaab”,则只能匹配出”aab”,若目标为”ab”,则无法匹配

  5. “{m,n}”中,m<n

  6. “[A-Za-z0-9]”匹配任何字母和数字,”\w”则匹配[A-Za-z0-9_](多一个下划线),”\s”是空白字符,大写”\w”和”\s”的规则都是原来的字符的对立规则

  7. 后面加问号,比如”*?”可将匹配符变成非贪婪的

  8. “^”在中括号内为否定,中括号/字符串外为头部边界,”$”则用作尾部边界

Python的re模块的通用代码patten

import re
pattern = re.compile("K[\w]*T")
# 无法匹配时将返回None
res = pattern.match("K[\w]*T")
if res:print(res.group())

结果:

In [10]: if res:print(res.group())
KabvT

如果匹配失败:

In [6]: res = pattern.match("K T")

In [7]: res.group()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-7-09a435ad28f6> in <module>()
----> 1 res.group()

结语

和Vi一样我也不能完全记住全部快捷键,正则还是用到再具体看吧

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2020 HOCHIKONG's WAPORIZer All Rights Reserved.

访客数 : | 访问量 :