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 表示匹配空白字符(解析不一定对哦。。。瞎写的)