python 正则表达式与JSON-正则表达式匹配数字、非数字、字符、非字符、贪婪模式、非贪婪模式、匹配次数指定等
1、正则表达式:目的是为了爬虫,是爬虫利器。
正则表达式是用来做字符串匹配的,比如检测是不是电话、是不是email、是不是ip地址之类的
2、JSON:外部数据交流的主流格式。
3、正则表达式的使用
re python 内置的模块,可以进行正则匹配
re.findall(pattern,source)
pattern:正则匹配规则-也叫郑泽表达式
source:需要查找的目标源
import re
a = "C0C++7Java8C#Python6JavaScript"
res = re.findall("Java",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['Java', 'Java']
4、正则表达式的应用
- 查数字
用概括字符集:\d
import re
a = "C0C++7Java8C#Python6JavaScript"
res = re.findall("\d",a)
print res
# Project/python_ToolCodes/test10.py"
# ['0', '7', '8', '6']用另外一种匹配模式-字符集:[0-9]
import re
a = "C0C++7Java8C#Python6JavaScript"
res = re.findall("[0-9]",a)
print res
# Project/python_ToolCodes/test10.py"
# ['0', '7', '8', '6']其中"Java"叫普通字符,"/d" 源字符
- 查非数字
用概括字符集:\D
import re
a = "C0C++7Java8C#Python6JavaScript"
res = re.findall("\D",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['C', 'C', '+', '+', 'J', 'a', 'v', 'a', 'C', '#', 'P', 'y', 't', 'h', 'o', 'n', 'J', 'a', 'v', 'a', 'S', 'c', 'r', 'i', 'p', 't']用另外一种匹配模式-字符集:[^0-9]
import re
a = "C0C++7Java8C#Python6JavaScript"
res = re.findall("[^0-9]",a)
print res
# Project/python_ToolCodes/test10.py"
# ['C', 'C', '+', '+', 'J', 'a', 'v', 'a', 'C', '#', 'P', 'y', 't', 'h', 'o', 'n', 'J', 'a', 'v', 'a', 'S', 'c', 'r', 'i', 'p', 't']- 正则表达式的罗列 :https://baike.baidu.com/item/正则表达式/1700215?fr=aladdin,挨个练习是没有必要的,用到去查即可
4、匹配模式
- 源字符+普通字符混合模式
[]中的或操作
#coding=utf-8
import re
a = "abc,acc,adc,aec,afc,ahc"
#匹配acc和afc
res = re.findall("a[cf]c",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['acc', 'afc']
取反操作:^
#coding=utf-8
import re
a = "abc,acc,adc,aec,afc,ahc"
#取出非(acc和afc)的字符
res = re.findall("a[^cf]c",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['abc', 'adc', 'aec', 'ahc']
取范围操作:-
#coding=utf-8
import re
a = "abc,acc,adc,aec,afc,ahc"
#取出acc,adc,aec,afc(中间字符是c到f范围的)
res = re.findall("a[c-f]c",a)
print res
- 匹配数字和字母:
概括字符集匹配:\w
import re
a = "abc&cba"
res = re.findall("\w",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['a', 'b', 'c', 'c', 'b', 'a']使用字符集匹配:[A-Za-Z0-9]
import re
a = "abc123&cba321"
res = re.findall("[A-Za-z0-9]",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['a', 'b', 'c', '1', '2', '3', 'c', 'b', 'a', '3', '2', '1']显然,是\w是不匹配非字母和数字的,比如“&”符号
- 匹配非单词非数字字符
概括字符集:\W
import re
a = "abc123&cba321"
res = re.findall("\W",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['&']使用字符集匹配:^A-Za-z0-9
import re
a = "abc123&cba321"
res = re.findall("[^A-Za-z0-9]",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['&'] - 空格、制表符、换行符号之类的匹配:\s
import re
a = "python 111\tjava&67p\nh\rp"
res = re.findall("\s",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# [' ', '\t', '\n', '\r']- 匹配量词:匹配出python Java php
必须三个一组:
[a-z]{3}
import re
a = "python 1111java678php"
res = re.findall("[a-z]{3}",a)
print res
[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
['pyt', 'hon', 'jav', 'php'] 可以3-6个一组:因为最长python 为6 最短PHP为3:[a-z]{3,6}
import re
a = "python 1111java678php"
res = re.findall("[a-z]{3,6}",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['python', 'java', 'php']疑问:为什么3个能匹配 匹配到pyt的时候为什么不终止?
因为正则表达式的数量词分为贪婪和非贪婪模式,默认情况下,python 认为是贪婪模式的。 非贪婪模式怎么使用:加个问号[a-z]{3,6}?
import re
a = "python 1111java678php"
res = re.findall("[a-z]{3,6}?",a)
print res
# [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['pyt', 'hon', 'jav', 'php']- * ,对*前面的字符'n',匹配0次或者无限次
import re
a = "pytho0python1pythonn2"
res = re.findall("python*",a)
print res # [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['pytho', 'python', 'pythonn']比如pytho 没有n 则是匹配0次,可匹配出来pytho;比如python 1个n 则是匹配1次,可匹配出来python;pythonn 2个n 则是匹配2次,可匹配出来pythonn
- +,对+前面的字符'n' 匹配1次或者无限次
import re
a = "pytho0python1pythonn2"
res = re.findall("python+",a)
print res # [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['python', 'pythonn']- ?,?前面的字符'n' 匹配0次或者1次
import re
a = "pytho0python1pythonn2"
res = re.findall("python?",a)
print res # [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['pytho', 'python', 'python']比如pytho 没有n 则是匹配0次,可匹配出来pytho;比如python 1个n 则是匹配1次,可匹配出来python;pythonn 2个n 则是匹配1次,可匹配出来python,因为多出来的n,直接被截断了,不符合匹配模式,所以匹配不出来pythonn 而是匹配出来的是python。也可以理解成?开启了非贪婪模式
- 如果要开启非贪婪模式,但是又不想用*,+ 去匹配无限次,而是指定匹配次数的范围,那么可以这样
python{1,2}
这表示,最多匹配2次,最少匹配1次
import re
a = "pytho0python1pythonn2"
res = re.findall("python{1,2}",a)
print res # [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test10.py"
# ['python', 'pythonn']
python 正则表达式与JSON-正则表达式匹配数字、非数字、字符、非字符、贪婪模式、非贪婪模式、匹配次数指定等的更多相关文章
- Python的正则表达式与JSON
Python的正则表达式需要导入re模块 菜鸟教程:http://www.runoob.com/python/python-reg-expressions.html 官方文档:https://docs ...
- Python(八) 正则表达式与JSON
一.初识正则表达式 正则表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配 快速检索文本.实现替换文本的操作 json(xml) 轻量级 web 数据交换格式 impor ...
- python 正则表达式与JSON字符串
目录 正则表达式 概括单字符集 匹配单字符 匹配字符集 普通字符与元字符 元字符和普通的字符的混用 数量词{整数|*|+|?} 匹配指规则的字母 贪婪模式 匹配指定长度的字符串 非贪婪模式 匹配指定长 ...
- python 正则表达式 贪婪模式的简介和匹配时的几种模式
看到一篇文章,关于python正则的,http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 贪婪模式与非贪婪模式: 正则表达式通常用于 ...
- 1.3 正则表达式和Python语言-1.3.5使用 search()在一个字符串中查找模式(搜索与匹配 的对比)
1.3.5 使用 search()在一个字符串中查找模式(搜索与匹配的对比) 其实,想要搜索的模式出现在一个字符串中间部分的概率,远大于出现在字符串起始部分的概率.这也就是 search()派上用场的 ...
- python正则表达式贪婪与非贪婪模式
之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意. 1.什么是正则表达式的贪婪与非贪婪匹配 如:String str="a ...
- C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
/// 去掉字符串中的数字 public static string RemoveNumber(string key) { ...
- Python3(七) 正则表达式与JSON
一. 初识正则表达式 1.定义:是一个特殊的字符序列,可以帮助检测一个字符串是否与我们所设定的字符序列相匹配. 2.作用:可以实现快速检索文本.实现替换文本的操作. 3.场景: 1.检测一串数字是否是 ...
- [Python] 网络爬虫和正则表达式学习总结
以前在学校做科研都是直接利用网上共享的一些数据,就像我们经常说的dataset.beachmark等等.但是,对于实际的工业需求来说,爬取网络的数据是必须的并且是首要的.最近在国内一家互联网公司实习, ...
随机推荐
- Scala 基础(一):各平台安装
一.win7环境安装1.安装jdk直接双击,安装到想要的环境目录2.修改环境变量2.1新建系统变量 JAVA_HOME 输入jdk安装目录 2.2 修改PATH修改PATH:%JAVA_HOME%\b ...
- SQLAlchemy02 /SQLAlchemy对数据的增删改查操作、属性常用数据类型详解
SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 目录 SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 1.用se ...
- python 迭代器(一):迭代器基础(一) 语言内部使用 iter(...) 内置函数处理可迭代对象的方式
简介 在 Python 中,所有集合都可以迭代.在 Python 语言内部,迭代器用于支持: 1.for 循环2.构建和扩展集合类型3.逐行遍历文本文件4.列表推导.字典推导和集合推导5.元组拆包6. ...
- 00-Windows系统MySQL数据库的安装
1.数据库安装 官网下载MySQL数据库. 下载安装包后解压缩到相关目录,我解压缩到:D:\360极速浏览器下载\mysql-8.0.19-winx64. 打开刚刚解压的文件夹 D:\360极速浏览器 ...
- html2canvas 实现页面转图片并下载
一 前言 最近做了一个周报,从不同的数据表抓取数据,然后展示到前端页面显示.这个过程不难,让我烦恼的是:要把周报的数据导出来,然后打印,打印也必须在一张纸上.想到这里,我整理了一下思绪,我要写几个存储 ...
- 基于python的自动化测试框架搭建
滴~ 今日打卡! 好多天没来打卡了.博主最近一直在把碎片化知识转化为知识体系的过程中挣扎.Python语言.selenium.unittest框架.HTMLTestRunner框架都有所了解,也写 ...
- scratch编程——画笔模块画各种同心图案
我们今天是要用画笔来画出不同的同心图案,在画之前,我们先来了解一下画笔模块: 1.画笔模块的用法 画笔模块的用法就是在舞台上留下不同颜色粗细的线条,它的默认是情况是抬笔,我们在使用的时候要让角色移动到 ...
- 遍历map的6种方式
1,平时开发中对map的使用很多,然后发现了很多map可能存在的各种问题:如HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素不断增加,容量 7 次被迫扩大,resize ...
- Alink漫谈(十三) :在线学习算法FTRL 之 具体实现
Alink漫谈(十三) :在线学习算法FTRL 之 具体实现 目录 Alink漫谈(十三) :在线学习算法FTRL 之 具体实现 0x00 摘要 0x01 回顾 0x02 在线训练 2.1 预置模型 ...
- java基础(七)--基本类型转换
一.转换规则 1.类型转换的原则是: 小容量可以自动转成大容量,大容量转成小容量,需要强制转换,有些类型之前不能转换 判断以下语句是否符合要求 2.默认的识别数字 整数默认->int 浮点数默认 ...