Xinnnnnner
2021-03-19 19:22
采纳率: 83.3%
浏览 40

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条回答 默认 最新

  • xindoo 2021-03-19 20:38
    已采纳

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

    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')获取到的内容。 

     

    点赞 2 打赏 评论

相关推荐 更多相似问题