zoukankan      html  css  js  c++  java
  • re_test

    https://www.cnblogs.com/zhaof/p/6925674.html#4152933

    https://www.cnblogs.com/lanyinhao/p/9165747.html

    re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配。在直接使用字符串表示的正则表达式进行search,match和findall操作时,python会将字符串转换为正则表达式对象。而使用compile完成一次转换之后,在每次使用模式的时候就不用重复转换。当然,使用re.compile()函数进行转换后,re.search(pattern, string)的调用方式就转换为 pattern.search(string)的调用方式。

    将正则表达式编译成正则表达式对象,方便复用该正则表达式

    其中,后一种调用方式中,pattern是用compile创建的模式对象。如下:

    >>> import re
    >>> some_text = 'a,b,,,,c d'
    >>> reObj = re.compile('[, ]+')
    >>> reObj.split(some_text)
    ['a', 'b', 'c', 'd']
    或者
    content= """hello 12345 world_this
    123 fan
    """
    
    pattern =re.compile("hello.*fan",re.S)
    
    result = re.match(pattern,content)
    print(result)
    print(result.group())

    re.match 从头开始匹配  尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配的话,match()就会返回None

    result.group()获取匹配的结果

    如果为了匹配字符串中具体的目标,则需要通过()括起来

    content= "hello 1234567 World_This is a regex Demo"
    result = re.match('^hellos(d+)sWorld.*Demo$',content)
    print(result)
    print(result.group())
    print(result.group(1))
    print(result.span())
    结果
    通过re.group()获得结果后,如果正则表达式中有括号,则re.group(1)获取的就是第一个括号中匹配的结果

    <_sre.SRE_Match object; span=(0, 40), match='hello 1234567 World_This is a regex Demo'>
    hello 1234567 World_This is a regex Demo
    1234567
    (0, 40)

    result.span()获去匹配字符串的长度范围

    compile()方法,这个方法可以将正则字符串编译成正则表达式对象,以便在后面的匹配中复用

    re.match 从头开始匹配
    re.search 匹配包含,但是找到一个就返回 
    re.findall 把所有匹配到的字符放到以列表中的元素返回
    前面我们介绍了search()方法的用法,它可以返回匹配正则表达式的第一个内容,但是如果想要获取匹配正则表达式的所有内容,那该怎么办呢?这时就要借助findall()方法了。该方法会搜索整个字符串,然后返回匹配正则表达式的所有内容。
    re.splitall 以匹配到的字符当做列表分隔符
    re.sub      匹配字符并替换

    '.'     默认匹配除 之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行

    '^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a"," abc eee",flags=re.MULTILINE)
    '$'     匹配字符结尾,或e.search("foo$","bfoo sdfsf",flags=re.MULTILINE).group()也可以
    '*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb''ab''a']
    '+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab''abb']
    '?'     匹配前一个字符1次或0
    '{m}'   匹配前一个字符m次
    '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb''ab''abb']
    '|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
    '(...)' 分组匹配,re.search("(abc){2}a(123|456)c""abcabca456c").group() 结果 abcabca456c
     
     
    'A'    只从字符开头匹配,re.search("Aabc","alexabc") 是匹配不到的
    ''    匹配字符结尾,同$
    'd'    匹配数字0-9
    'D'    匹配非数字
    'w'    匹配[A-Za-z0-9]
    'W'    匹配非[A-Za-z0-9]
    's'     匹配空白字符、 、 、 , re.search("s+","ab c1 3").group() 结果 ' '
     
    re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
    M(MULTILINE): 多行模式,改变'^''$'的行为(参见上图)
    S(DOTALL): 点任意匹配模式,改变'.'的行为
     
     
  • 相关阅读:
    无重复字符的最长子串
    有效的括号
    最长公共前缀
    罗马数字转整数
    Android解析JSON数据异步加载新闻图片
    回文数
    Java从Json获得数据的四种方式
    JavaMD5加密工具类
    div模仿select效果二:带搜索框
    BG雪碧图制作要求
  • 原文地址:https://www.cnblogs.com/x2x3/p/9446761.html
Copyright © 2011-2022 走看看