python 正则语句

刚入门python re有三行代码看不懂请问有没有大佬可以帮帮忙

re.compile(r":param(?: (?P<type>\w+))? (?P<param>\w+):(?: (?P<doc>.*))?")
re.compile(r":rtype: (?P<rtype>.*)")
re.compile(r"^(?P<type1>\w+?) of (?P<type2>.+)$")

 

看懂正则表达式最好的方式就是对正则表达式做拆分,在理解完整的正则表达式之前,先介绍下这几个正则表达式中涉及到的知识点。

1. (?:) 是特殊的分组,表示不捕获括号里的内容,只做定位,例:(?:abc)def 对字符串abcdef匹配到def,无法匹配到123def中def。

2. (?P<name>...) 是python特有的正则规则,其意义是对括号内匹配的内容做组(group)的命名,方便获取获取。例:

>>> p = re.compile(r'(?P<word>abc)def') 
>>> m = p.search('abcdef')
>>> m.group('word')  # (?P<word>abc)匹配到了abc,这里可以以word获取到匹配的值。  
abc

3. 其他就是正则表达式是基本用法了,+?表示非贪婪匹配,\w表示[a-zA-Z]和下划线_, 括号后面加?表示可有可无,^ 头,$ 尾,+ 1到n次,* 0到n次。 

运用上面知识点,具体看下这三个正则表达式

(?P<name>...)只是为了方便通过别名获取到括号里匹配的内容,不影响正则表达式的意义,所以可以去掉,三个正则表达式就简单多了,分别如下

":param(?: (\w+))? (\w+):(?: (.*))?"   

":rtype: (.*)"  

"^(\w+?) of (.+)$"

是不是好理解多了,第2 3个超简单了,就不说了,详细介绍下第一个。  

":param(?: (\w+))? (\w+):(?: (.*))?"    可以分为几个部分。 

:param  固定前缀

(?: (\w+))? 类型(type),可有可无,但最终不会不会成为该正则表达式匹配的内容,只能通过m.group('type')获取到的内容。 

(\w+)  参数(param) 必须有,可以通过m.group('doc')获取到匹配的内容。

: 冒号 必须有  

(?: (.*))?  文档(doc),可有可无,但最终不会不会成为该正则表达式匹配的内容,只能通过m.group('doc')获取到的内容。