zoukankan      html  css  js  c++  java
  • python 正则表达式 初级

    举例:

    1.匹配hello world

    key = r"<h1>hello world<h1>" #源文本
    p1 = r"<h1>.+<h1>" #正则表达式
    pattern1 = re.compile(p1)
    print pattern1.findall(key) #findall返回的是所有符合要求的元素列表,如果只有一个元素时,它还是返回列表。

    2.匹配@与.之间的ygomi

    key='aaaapiaoyu.qiu@ygomi.com.cn'
    >>> p1=r"@.+."
    >>> pattern1=re.compile(p1
    >>> pattern1.findall(key)
    ['@ygomi.com.']    #结果匹配到了更多的内容
    >>> 
    >>> p1=r"@.+?."    #增加?
    >>> pattern1=re.compile(p1)
    >>> pattern1.findall(key)
    ['@ygomi.']    #匹配成功
    原因是正则表达式默认是“贪婪”的,“+”代表是字符重复一次或多次,在我们没有细说这个多次到底是多少次时,它会尽可能“贪婪”地多给我们匹配字符,即匹配到最后一个“.”。怎么解决这种问题呢?只要在“+”后面加一个“?”就可以将贪婪的“+”改成了懒惰的“+”。

    3.准确控制控制重复次数:{a,b} 其中,a<=匹配次数<=b

    举栗,我们有sas,saas,saaas,我们想要sas和saas
    key = r"saas and sas and saaas"
    p1 = r"sa{1,2}s"
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    输出:['saas', 'sas']
     
    如果你省略掉{1,2}中的2,那么就代表至少匹配一次,那么就等价于?。如果你省略掉{1,2}中的1,那么就代表至多匹配2次。

    正则表达式里的元字符及其作用:

    元字符
    说明
    .
    代表任意字符,用于匹配除换行符( )之外的所有字符。
    |
    逻辑或操作符,例如:A|B用于匹配A或B
    [ ]
    匹配内部的任一字符或子表达式
    [0-9] 0123456789任意之一
    [a-z]   小写字母任意之一
    [A-Z]   大写字母任意之一
    [^]
    '[]'用于标示一组字符,如果^是第一个字符,则标示的是一个补集。
    比如[0-9]表示所有的数字,[^0-9]表示除了数字外的字符。
    -
    定义一个区间
    对下一字符取非(通常是普通变特殊,特殊变普通)
    *
    匹配前面的字符或者子表达式0次或多次(贪婪模式,即尽可能多的匹配)
    *?
    惰性匹配上一个(非贪婪模式)
    +
    匹配前一个字符或子表达式一次或多次(贪婪模式)
    +?
    惰性匹配上一个(非贪婪模式)
    ?
    匹配前一个字符或子表达式0次或1次重复(贪婪模式)
    {n}
    匹配前一个字符或子表达式
    {m,n}
    匹配前一个字符或子表达式至少m次至多n次
    {n,}
    匹配前一个字符或者子表达式至少n次
    {n,}?
    前一个的惰性匹配
    ^
    匹配字符串的开头
    A
    匹配字符串开头
    $
    匹配字符串的末尾(末尾如果有换行符 ,就匹配 前面的那个字符)
    []
    退格字符
    c
    匹配一个控制字符
    d
    匹配任意数字,等同于[0-9]
    D
    匹配数字以外的字符,等同于[^0-9]匹配非数字
    匹配制表符
    w
    匹配任意数字字母下划线,,,等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线
    W
    不匹配数字字母下划线,,,等同于[^a-z0-9A-Z_]等同于上一条取非
     
  • 相关阅读:
    Codeforces Round #486 (Div. 3) F. Rain and Umbrellas
    Codeforces Round #486 (Div. 3) E. Divisibility by 25
    Codeforces Round #486 (Div. 3) D. Points and Powers of Two
    Codeforces Round #486 (Div. 3) C. Equal Sums
    Codeforces Round #486 (Div. 3) B. Substrings Sort
    Codeforces Round #486 (Div. 3) A. Diverse Team
    2018-06-08
    CCPC-2017-秦皇岛站
    洛谷 P4819 [中山市选]杀人游戏
    洛谷 P2721 小Q的赚钱计划
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12068720.html
Copyright © 2011-2022 走看看