美文网首页
正则表达式---12.1

正则表达式---12.1

作者: a荷包蛋 | 来源:发表于2017-12-01 20:45 被阅读0次

    (一)定义

    正则表达式是对字符串(包括普通字符(例如,a 到 z之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符

                   1.“ . ”------------用法

    importre

    # '.'---匹配任意一个字符,除了(\n)

    #match ---从头查找  *代表所有

    ret=re.match('.*','fdsgfh')

    print(ret)

    2.” 【 】”--------用法

    #[a-z]可以表示范围,[adsfd]--符合其中一个就可以

    ret=re.match('[a-z]','adf')

    print(ret)

    print(ret.group())

    3. \d---匹配数字   \D---匹配非数字

    ret=re.match('\d','1adf')

    print(ret)

    print(ret.group())

    #第二种

    ret=re.match('\D','1BBdf')

    print(ret)

    print(ret.group())

    4.\s--匹配空白 tab键   \S匹配非空白

    ret=re.match('\s',' 1BBdf')

    print(ret)

    print(ret.group())

    print('............................')

    ret=re.match(r'\s','\t1BBdf')

    print(ret)

    print(ret.group())

    print('................................')

    ret=re.match(r'\S','1BBdf')

    print(ret)

    print(ret.group())

    5.\w---匹配单词字符   \W---匹配非单词字符

    #w---匹配单词字符 后面的re.A---限制只能使用ascii 码里的字符(除了中文)

    ret=re.match('\w','中5cdf',re.A)

    print(ret)

    print(ret.group())

    #'W'---匹配非单词字符---只能识别一些符号例如(),。

    ret=re.match('\W','5cdf',re.A)

    print(ret)

    print(ret.group())

    #但是后面加上re.A 可以识别中文

    ret=re.match('\W','中5cdf',re.A)

    print(ret)

    print(ret.group())

    6.[\u4e00-\u9fa5]----直接匹配中文

    ret=re.match('[\u4e00-\u9fa5]','中国')

    print(ret)

    (二)---表示数量

    1.‘*’

    #"*"---只能取它前面的那个字符,尽可能的取到它出现的所有

    ret=re.match('aw*','aawwdfs')

    print(ret)

    print(ret.group())

    2.“ +”

    # '+'---仅匹配它前面的一个字符,至少出现一次

    # ret=re.match('aw+','aawwdfs')

    # print(ret)

    # print(ret.group())

    #像以上代码会报错,因为a匹配到,但是w一次也没有

    # ret=re.match('aaw+','aawwdfs')

    # print(ret)

    # print(ret.group())

    3. “?”

    #'?'---仅匹配它前面的一个字符,出现次数可以<=1

    #所以它前面那个字符如果没有就不会报错

    ret=re.match('aw?','aawwdfs')

    print(ret)

    print(ret.group()

    4.{m}  {m,} {m,n}

    '{m}'---仅匹配它前面的一个字符,出现次数可以m次

     ret=re.match('aaw{1}','aawwdfs')

     print(ret)

     print(ret.group())

    '{m,}'---仅匹配它前面的一个字符,出现次数可以>m次

     ret=re.match('aaw{2,}','aawwwdfs')

     print(ret)

     print(ret.group())

    '{m,n}'---仅匹配它前面的一个字符,出现次数可以m

     ret=re.match('aaw{2,5}','aawwwdfs')

     print(ret)

     print(ret.group())

    (三)------边界

    1.“ ^ ”

    把“^”---写到列表里是除了哪些内容,剩下的

     ret=re.match('[^a-z]','1aawwdfs')

     print(ret)

     print(ret.group())

    2."$"

    #$---限制字符以什么结尾 ^---跟match 相同

    while True:

    emil=input('--')

    ret=re.search('^[a-zA-Z0-9]+@168.com$',emil)

    print(ret)

    3."\b"

    #\b------匹配单词的边界

    ret=re.match(r'who\b','who am i')

    print(ret)

    ret=re.match(r'who\s','who am i')

    print(ret)

    #假如说who后面有数不过来的空格

    ret=re.match(r'who\b\s*','who  am i')

    print(ret)

    #匹配中文的边界,注意边界字符串间一定要用空格隔开

    ret=re.match(r'我\b','我 是谁')

    print(ret)

    #不加空格,返回的就是None

    ret=re.match(r'我\b','我是谁')

    print(ret)

    (四)分组

    #因为?前匹配可以是一个也可以是零个,所以把8分给\d

    #在正则里面加小括号可以分组 从1开始

    ret = re.match("([1-9]?)(\d)","8")

    print(ret.group(1))

    print(ret.group(2))

    ret = re.match("([1-9]?)(\d)","80")

    print(ret.group(1))

    print(ret.group(2))

    “ | ”------或者

    "|"---表示或者,一般前面满足结果就是前面 第三种情况前面满足不了输出是None,所以结果是None

    ret = re.match("[1-9]?\d$|100","8")

    print(ret)

    ret = re.match("[1-9]?\d$|100","78")

    print(ret)

    ret = re.match("[1-9]?\d$|100","08")

    print(ret)

    (五)高级用法

    1.#compile函数用于编译正则表达式,生成一个 Pattern 对象

    #用这个对象.match( )括号里只放字符串就好

    pattern =re.compile('a+')

    info='abbb'

    ret=pattern.match(info)

    print(ret)

    2.search方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果

    3.match如上,不过他是从头查找

    4.findall  

    #findall

    上面的 match 和 search 方法都是一次匹配,只要找到了一个匹配的结果就返回。然而,在大多数时候,我们需要搜索整个字符串,所以用findall获得所有匹配的结果,并生成列表  

     pattern = re.compile(r'\d+')  # 查找数字

     result1 = pattern.findall('hello 123456 789')

    # 0-10  确定范围

     result2 = pattern.findall('one1two2three3four4', 0, 10)

     print(result1)

     print(result2)

    5.finditer

    # #finditer---和findall相似也是搜索整个字符串。不过最后可以生成一个迭代器

    pattern = re.compile(r'\w+')

    result2 = pattern.finditer('one1two2three3four4', 0, 10)

    print(result2)

    for i in result2:

    print(i.group())

    6.sub-----替换

    info='hello 123,hello xiaocui'

    ret=re.sub(r'(\w+) (\w+)',r'\2 \1',info)

    print(ret)

    7.split----分割

    ret=re.split(':| +','sd:dsf Fds')

    print(ret)

    8.贪婪/非贪婪

    #贪婪  程序默认为贪婪

    s="This is a number 234-235-22-423"

    ret = re.match(r"(.+)(\d+-\d+-\d+-\d+)",s)

    print(ret)

    print(ret.group())

    print(ret.group(1))

    print(ret.group(2))

    s="This is a number 234-235-22-423"

    ret = re.match(r"(.+?)(\d+-\d+-\d+-\d+)",s) #加?变为非贪婪

    print(ret)

    print(ret.group())

    print(ret.group(1))

    print(ret.group(2))

    ret=re.match(r'(\w)+(\s)+','ask jh f   kj')

    print(ret)

    print(ret.start())

    print(ret.span(2))

    print(ret.start(2))

    print(ret.group(1))

    print(ret.group(2))

    相关文章

      网友评论

          本文标题:正则表达式---12.1

          本文链接:https://www.haomeiwen.com/subject/gagwbxtx.html