刚入门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>.+)$")
刚入门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')获取到的内容。