• Python: 正则表达式


    1.了解正则表达式

    正则表达式是对字符串操作的一种逻辑公式,是用来匹配字符串的非常强大的工具,利用正则表达式来提取想要的内容。

    正则表达式的大致匹配过程如下

    1)依次拿出表达式和文本中的字符比较

    2)如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。

    3)如果表达式中有量词或边界,这个过程会稍微有些不同。

    2.正则表达式的语法规则

    1)  . 匹配任意字符

    eg:

    >>>m=re.match(r'a.','a99')

    >>>m

    <-sre.SRE_Match object;span=(0,2),match='a9'>

    2)  ^ 匹配字符串开头 

    eg:

    >>>m=re.match(r'^a','a99')

    >>>m

    <-sre.SRE_Match object;span=(0,1),match='a'>

    3)  $ 匹配字符串结尾

    eg:

    >>>m=re.match(r'.*?a$','a99a')

    >>>m

    <-sre.SRE_Match object;span=(0,4),match='a99a'>

    4)  | 逻辑或操作符

    eg:

    >>>m=re.match(r'a|A','A99')

    >>>m

    <-sre.SRE_Match object;span=(0,1),match='A'>

     

    5)  [] 匹配内部的任一字符或者子表达式

    eg1:

    >>>m=re.match(r'[a-z]+','dgfjjghhj')

    >>>m

    <-sre.SRE_Match object;span=(0,9),match='dgfjjghhj'>

    eg2:

    >>>m=re.match(r'[a-z]','dgfjjghhj')

    >>>m

    <-sre.SRE_Match object;span=(0,9),match='d'>

     

    6)  [^] 对字符集合取非

    eg:

    >>>m=re.match(r'[^a-zA-Z0-9]+','@dgfjjghhj')

    >>>m

    <-sre.SRE_Match object;span=(0,1),match='@'>

     

    7)  - 定义一个区间

    eg:

    >>>m=re.match(r'[^a-zA-Z0-9]+','@dgfjjghhj')

    >>>m

    <-sre.SRE_Match object;span=(0,1),match='@'>

     

    8)   对下一字符取非(通常是普通变特殊,特殊变普通)

    eg:

    >>>m=re.match(r'\','\abc')

    >>>m

    <-sre.SRE_Match object;span=(0,1),match='\'>

     

    9)  * 匹配前面的字符或者子表达式0次或者多次

    eg:

    >>>m=re.match(r'[a-zA-Z0-9]+','dgfjjghhj')

    >>>m

    <-sre.SRE_Match object;span=(0,9),match='dgfjjghhj'>

     

    10)  ? 匹配前面的字符或者子表达式0次或者1次

    eg:

    >>>m=re.match(r'a?','dgfjjghhj')

    >>>m

    <-sre.SRE_Match object;span=(0,0),match=''>

    字符串里没有a也能匹配的上

    11)  *? 惰性匹配上一个

    匹配到第一个"就结束了一次匹配。不会继续向后匹配。因为他懒惰嘛。

    >>>m=re.match(r'a*?','aa')

    >>>m

    <-sre.SRE_Match object;span=(0,0),match=''>

    这是我在py 解释器里结果,我不知道什么原因一次都没匹配,如果谁知道,请留评论,谢谢

     

    12)  +? 惰性匹配上一个

    eg1:

    >>>m=re.match(r'a+?','aaa')

    >>>m

    <-sre.SRE_Match object;span=(0,1),match='a'>

    匹配到第一个"就结束了一次匹配。不会继续向后匹配。因为他懒惰嘛。

    eg2:

    >>>m=re.match(r'a+','aaa')

    >>>m

    <-sre.SRE_Match object;span=(0,3),match='aaa'>

     13)  + 匹配上一个字符或者子表达式一次或者多次

    eg1:

    >>>m=re.match(r'a+','aaa')

    >>>m

    <-sre.SRE_Match object;span=(0,3),match='aaa'>

    eg1:

    >>>m=re.match(r'a','aaa')

    >>>m

    <-sre.SRE_Match object;span=(0,1),match='a'>

     

     

    未完待续

     

  • 相关阅读:
    iOS开发之JSON格式数据的生成与解析
    Xcode 怎么查看代码总行数
    iOS OC与JS的交互(JavaScriptCore实现)
    Webstorm设置代码提示
    iOS app性能优化的那些事
    pThread多线程demo
    更新UI放在主线程的原因
    iOS小知识点
    上传本地代码及更新代码到GitHub教程
    logstash安装配置
  • 原文地址:https://www.cnblogs.com/baxianhua/p/8329615.html
Copyright © 2020-2023  润新知