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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。