python 正则表达式与JSON-边界匹配

1、边界匹配

eg.判断一个账号是不是qq号。原则是,数字是4位到8位的,都认为是qq号。

#coding=utf-8
import re
#qq号长度范围是4到8位
qq = "100000001"
r = re.findall("^\d{4,8}",qq)
print(r)
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test11.py"
# ['10000000']

分析:qq = "100000001"是10位,但是确实也能匹配到8个数字,但是其实这串数有十个,就不是个qq号,那这样就算误判了

怎么处理呢?

(1)加个逻辑,把匹配出来的字符串和qq比较,想等,则认为是qq,否则不是;太麻烦,不推荐

(2)加边界修饰符$

#coding=utf-8
import re
#qq号长度范围是4到8位
qq = "100000001"
r = re.findall("^\d{4,8}$",qq)
print(r)
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test11.py"
# []

匹配出来是[],说明没有满足条件的字符

那么,想一下,为什么有这个效果。分析^\d{4,8}$这个正则表达式

^:从字符串开始的位置匹配,$:从字符串的末尾匹配,匹配的字符串是4到8位的;如果匹配不到,就[],如果能匹配到,就返回匹配字符串。

2、指定字符组合的重复;前面python{3},这种,只是指的n重复出现3次的匹配出来;要匹配pythonpythonpython中的python(字符组合)的3次匹配要怎么办?

用小括号给字符组括起来,表示是要讲这个字符组和匹配3次;(python){3}

结果有问题。。。。

#coding=utf-8
import re
#qq号长度范围是4到8位
qq = "pythonpythonpythonpython"
r = re.findall("(python){3}",qq)
print(r)
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test11.py"
# ['python']

3、匹配模式

  • 大小写:
    re.findall('c#',a,re.I)的第三个参数
  • #coding=utf-8
    import re
    a  = "C#|c#"
    r  = re.findall('c#',a,re.I) 
    print(r)
    # [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test12.py"
    # ['C#', 'c#']

     

  • 多类匹配模式(大小写、空白字符)
  • #coding=utf-8
    import re
    a  = "C#|c#\n"
    r  = re.findall('c#.{1}',a,re.I|re.S) 
    print(r)
    # [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test12.py"
    # ['C#|', 'c#\n']

    解析:.表示匹配除了\n 换行符,任意的字符,re.S 表示匹配空白字符(解析不一定对哦。。。瞎写的)

posted @ 2020-08-06 15:35  XiaoLee-C  阅读(581)  评论(0编辑  收藏  举报