• python正则表达式--特殊字符


    正则表达式—特殊表达式含义

    正则表达式的字母和数字表示他们自身,但多数字母和数字前加一个反斜杠时会拥有不同的含义。 

    下面列出了正则表达式模式语法中的特殊元素。

    1.普通字符集

    1)    w              匹配字母数字及下划线

    2)    W              匹配非字母数字及下划线

    3)    s               匹配任意空白字符,等价于 [ f].

    4)    S               匹配任意非空白字符

    5)    d               匹配任意数字,等价于 [0-9]

    6)    D              匹配任意非数字

    7)    1...9            匹配第n个分组的内容。

    8)    [a-zA-Z0-9]    匹配任何字母及数字

    2.数量字符集

    用在字符或分组符(...)之后,默认贪婪匹配,如果想抑制贪婪匹配,需在数量字符后加?,例如:w+?

    1) .    匹配任意字符,除了换行符,当re.DOTALL标记被指定时,可以匹配包括换行符的任意字符

    2)  *        匹配前一个字符0次1次或多次

    3)  +        匹配前一个字符1次或多次

    4)  ?        匹配前一个字符0次或1次

    5)  {m}     匹配前一个字符m次

    6)  {m,n}   匹配前一个字符m到n次

    7)  {m,}     匹配前一个字符至少m次

    8)  {,n}      匹配前一个字符0到n次,最多n次

    3.边界匹配符

    1)  ^       匹配字符串开头,如果是多行则匹配每一行的开头

    2)  [^]       在[...]中,^表示否定,如非字母[^a-zA-Z],非数字[^0-9]

    3)  $       匹配字符串或一行的结尾,如果是多行匹配模式,则每一行的结尾

    4)  A       仅匹配字符串的开始,同^

    5)          匹配一个单词的边界,也就是指单词和空格间的位置

    6)  B       等价于[^]表示匹配非单词边界

    7)         匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。

    8)  z        匹配字符串结束

    4.逻辑匹配符

    1)  |(或)

        匹配 | 左右任意一种正则表达式,如果左边表达式匹配上,匹配结束,不再匹配右边的正则表达式,该符号一般放在()中使用,如果没在圆括号中则它的范围是整个正则表达式

    2)  分组 (...)

        后向引用,用()括起来的正则表达式将被作为一个分组,从正则表达式的左边依次算起,有多少个左括号'(',就有 多少个分组,分组的编码从1依次加1,无论是括号中嵌套括号,并且分组表达式作为一个整体,后可接数量词。

    3)  <number>

        引用分组匹配到的分组编号为<number>的字符串 如:1...9

    4)  (?P<name>...)

        命名分组,除了默认的分组编号外再指定一个别名分组

        注意:P是大写

    5)  (?P=name)

        引用别名为name的分组匹配,这个是在正则表达式中引用,表示匹配重复的字符串,也可以使用编号引用。

        注意:P是大写

    5.特殊匹配符

    1)  (?imx)     正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。

    2)  (?-imx)      正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。

    3)  (?:...)        匹配到的括号内字符串不作为分组

    4)  (?!pattern)       前向否定断言语法,表示否定开头

              只能用在正则表达式的开头,pattern是匹配模式,它后面的内容需要不匹配 该正则表达式才匹配成功

    5)  (?<!pattern)   后向否定断言语法,表示否定结尾

               前面的内容需要不匹配该pattern模式才匹配成功

    6)  (?=pattern)   前向肯定断言语法.

              需要匹配pattren模式才能匹配成功,表示肯定前面的字符内容

    7)  (?<=pattern)    后向肯定断言语法

             需要匹配pattern模式才能匹配成功,表示肯定后面的字符内容

    8)     (?#...)           #后面的内容将被作为注释而忽略

     1 # coding=utf-8
     2 import re
     3 # 1. 写一个正则表达式,使其能同时识别下面所有的字符串:'bat','bit', 'but', 'hat', 'hit', 'hut'
     4 
     5 s ="bat ,bit ,but ,hat ,hit ,hut"
     6 print re.findall(r'[bh][aiu]t',s)
     7 
     8 # 2.匹配由单个空格分隔的任意单词对,也就是姓和名
     9 
    10 s = "Han meimei, Li lei, Zhan san, Li si"
    11 print re.findall(r'([A-Za-z]+) ([A-Za-z]+)',s)
    12 
    13 # 3. 匹配由单个逗号和单个空白符分隔的任何单词和单个字母,如姓氏的首字母
    14 
    15 s = "yu, Guan  bei, Liu  fei, Zhang"
    16 print re.findall(r'([a-zA-Z]+),s([a-zA-Z])',s)
    17 
    18 # 4.匹配所有的有效的Python标识符集合
    19 
    20 s = "_hello , python_1 , 2world , Pra_ni , @dfa_ , ewq* "
    21 print re.findall(r'[a-zA-z_][w]*(?!=W) ',s)
    22 
    23 # 5. 根据美国街道地址格式,匹配街道地址。美国接到地址使用如下格式:1180 Bordeaux Drive。使你的正则表达式足够灵活,以支持多单词的街道名称,如3120 De la Cruz Boulevard
    24 
    25 s = """street 1: 1180  Bordeaux Drive,"
    26     street 1: 3120 De la Cruz Boulevard"""
    27 print re.search(r'd+( +[a-zA-Z]+)+',s).group()
    28 
    29 # 6. 匹配以“www”起始且以“.com”结尾的简单Web域名:例如,http://www.yahoo.com ,也支持其他域名,如.edu .net等
    30 
    31 s = "http://www.yahoo.com        www.foothill.edu"
    32 print re.search(r'w{3}.[a-zA-Z]+.(com|edu|net)',s).group()
    33 
    34 # 7. 匹配所有能够表示Python整数的字符串集
    35 
    36 s = '520a1    20L 0  156   -8 -10a  A58'
    37 ite = re.finditer(r'-?d+',s)
    38 for i in ite: print i.group(),
    39 
    40 # 8. 匹配所有能够表示Python长整数的字符串集
    41 
    42 s = '520a    20L 0  156   -8L  A58'
    43 ite = re.finditer(r'-?d+L',s)
    44 for i in ite: print i.group(),
    45 
    46 # 9. 匹配所有能够表示Python浮点数的字符串集
    47 
    48 s = '80.2  fds2.1  0.003'
    49 print re.findall(r'd+.d+',s)
    50 
    51 # 10. 表示所有能够表示Python复数的字符串集
    52 
    53 s = '12j  fds -4j  5-2j fdsa'
    54 print re.findall(r'd*-?d+j',s)
    55 
    56 # 11、匹配一行文字中的所有开头的字母内容
    57 
    58 s="Now, let's take a closer look at some iconic moments from the show's stage made by Chinese Angels."
    59 print re.findall(r'w',s)
    60 
    61 # 12、匹配一行文字中的所有开头的数字内容
    62 
    63 s="Now, let's take a closer look at some iconic moments from the show's stage made by Chinese Angels."
    64 print re.findall(r'd',s)
    65 
    66 # 13、匹配一行文字中的所有开头的数字内容或字母内容
    67 
    68 s = "577fsda3f you12daf f1s32dafffff"
    69 print re.findall(r'd+|[A-Za-z]+',s)
    70 
    71 # 14、 只匹配包含字母和数字的行
    72 
    73 s = "nihao fsadf 
    789! 3asfd 1
    fds12df e4 4564"
    74 print re.findall(r'^([a-zA-Zd ]+)$',s,re.M)
    75 
    76 # 15、提取每行中完整的年月日和时间字段
    77 
    78 s="""time 1988-01-01 17:20:10 fsadf 2018-02-02 02:29:01"""
    79 print re.findall(r'[12]d{3}-[01]d-[0123]ds*[012]d:[012345]d:[012345]d',s)
    80 
    81 # 16、将每行中的电子邮件地址替换为你自己的电子邮件地址
    82 
    83 s="""xss@qq.com, 465465@163.com, ppp@sina.com
    84     s121f@139.com, soifsdfj@134.com
    85     pfsadir423@123.com"""
    86 print re.sub(r'w+?@w+?.com','zeke@qq.com',s)
    87 
    88 # 17、匹配home关键字:
    89 
    90 s ="fdsar home   homeer"
    91 print re.findall(r'\home',s)
  • 相关阅读:
    浅谈设计和编码
    谈谈分工
    我们需要专职的QA吗?
    几句禅语的解释
    理想的程序员
    表连接
    关于集群和分布式的好文
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & ManacherC
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher B
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher A
  • 原文地址:https://www.cnblogs.com/jinan1/p/10760830.html
Copyright © 2020-2023  润新知