• python-正则表达式


    定义

    就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,
    (在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被
    编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

    二元字符

    .   ^   $   *   +   ?   { }   [ ]   |   ( )

    实例

    +           匹配+号前内容1次至无限次
    ? 匹配?号前内容0次到1次
    {m} 匹配前面的内容m次
    {m,n} 匹配前面的内容m到n次
    *?,+?,??,{m,n}?    前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

    从前面的描述可以看到'*','+'和'*'都是贪婪的,但这也许并不是我们说要的,
    所以,可以在后面加个问号,将策略改为非贪婪,只匹配尽量少的RE。示例,

    1  print(re.findall(r"a(d+?)","a23b")) # 非贪婪模式
    2  >>>['2']
    3 print( re.findall(r"a(d+)","a23b"))
    4 >>> ['23']

    :
    反斜杠后边跟元字符去除特殊功能,
    反斜杠后边跟普通字符实现特殊功能。
    引用序号对应的字组所匹配的字符串

    1 #search查找匹配字符的起始位置与终止位置
    2 n=re.search(r"(alex)(eric)com2","alexericcomeric")
    3 print(n.span())
    4 >>>(0, 15)

    d 匹配任何十进制数;它相当于类 [0-9]。
    D 匹配任何非数字字符;它相当于类 [^0-9]。
    s 匹配任何空白字符;它相当于类 [ fv]。
    S 匹配任何非空白字符;它相当于类 [^ fv]。
    w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
    W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
    : 匹配一个单词边界,也就是指单词和空格间的位置。
    匹配单词边界(包括开始和结束),这里的“单词”,是指连续的字母、数字和
    下划线组成的字符串。注意,的定义是w和W的交界,
    这是个零宽界定符(zero-width assertions)只用以匹配单词的词首和词尾。
    单词被定义为一个字母数字序列,因此词尾就是用空白符或非字母数字符来标
    示的。

    1 print( re.findall(r"abc","dzx &abc sdsadasabcasdsadasdabcasdsa"))
    2 >>>['abc']
    3 print( re.findall(r"abc","dzx &abc sdsadasabcasdsadasdabcasdsa"))
    4 >>>['abc']
    5 print( re.findall(r"abc","dzx sabc sdsadasabcasdsadasdabcasdsa"))
    6 >>>[]

    注意:
    re.match('com', 'comwww.runcomoob')
    re.search('dcom', 'www.4comrunoob.5com')
    一旦匹配成功,就是一个match object 对象,而match object 对象拥有以下方法:
    group() 返回被 RE 匹配的字符串
    start() 返回匹配开始的位置
    end() 返回匹配结束的位置
    span() 返回一个元组包含匹配 (开始,结束) 的位置
    group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。

    1. group()返回re整体匹配的字符串,
    2. group (n,m) 返回组号为n,m所匹配的字符串,如果组号不存在,则返回indexError异常
    3.groups()groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到
    所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则
    表达式中定义的组。

    1 import re
    2 a = "123abc456"
    3 re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) #123abc456,返回整体
    4 re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1) 
    5 >>>[123]
    6 re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2) 
    7 >>>[abc]
    8 re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)
    9 >>>[456]

    group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3)
    列出第三个括号匹配部分。

    #re.findall  以列表形式返回所有匹配的字符串
    #re.findall可以获取字符串中所有匹配的字符串。如:
    p = re.compile(r'd+')
    print(p.findall('one1two2three3four4'))
    >>>['1', '2', '3', '4']
    #获取字符串中,包含'oo'的所有非字符单词
    text = 'djks#dooljsdJ('
    print(re.findall(r'w*oow*', text))
    >>>['dooljsdJ']
    #以数字分割字符串
    p = re.compile(r'd+')
    print(p.split('one1two2three3four4'))
    >>>['one', 'two', 'three', 'four', '']
    #等同于
    print(re.split('d+','one1two2three3four4'))
    >>>['one', 'two', 'three', 'four', '']
    1 a = 'abc123abv23456'
    2 b = re.findall(r'23(a)?',a)
    3 print(b)
    4 >>>['a', '']
    5 #匹配23后面为任意一个字符
    6 b = re.findall(r'23(?:a)?',a)
    7 print(b)
    8 >>>['23a', '23']
  • 相关阅读:
    POJ 3186 Treats for the Cows
    HDU 1226 超级密码| NYOJ 929 密码宝盒
    POJ 1661 Help Jimmy
    POJ 1458 Common Subsequence
    POJ 1015 Jury Compromise
    window.history,页面中的返回按钮
    网站新功能引导镂空效果
    HTML5存储
    JSON对象
    点击超链接,将页面中某个数据传到另一个页面
  • 原文地址:https://www.cnblogs.com/liguangxu/p/5582404.html
Copyright © 2020-2023  润新知