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

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 Java领域优质创作者 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')获取到的内容。 

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥15 QT6颜色选择对话框显示不完整
  • ¥20 能提供一下思路或者代码吗
  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥15 DS18B20内部ADC模数转换器