一、正则表达式
正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列相匹配。
快速检索文本、实现一些替换文本的操作:
1. 检查一串数字是否是电话号码
2. 检测一个字符串是否符合email
3. 把一个文本里指定的单词替换未另一个单词
python的内置函数,如下:
二、元字符与普通字符
正则表达式中 '\d' 代表的是数字
获取字符串a中所有的数字字符‘Python’ 普通字符
‘\d’ 元字符 (其中的一种)
\D:匹配字符串中所有的非数字字符
三、字符集
概括字符节
\d:0-9的数字,等价于[0-9]
\D: 非数字,等价于[^0-9]
\w:匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。比如 &等匹配不到
\W:匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
\s:匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]
\S:匹配任何可见字符。等价于[^ \f\n\r\t\v]
数量词
贪婪与非贪婪
贪婪:
[a-z]{3,6}--->'python','java','php'
非贪婪:
[a-z]{3,6}?--->'pyt','hon','jav','php'
匹配0次1次或者无限多次
re.findall('python*', a) # *表示python字符串最后一个字符n匹配0到无限多次,也就是pytho之后出现0到无限多个n都成立。
re.findall('python+', a) #最后一个字符匹配1到无限多次
re.findall('python?', a) #最后一个字符匹配0次或者1次,
需要注意的是pythonn也会被匹配,成为'python',因为这部分匹配了1次,是符合条件的。利用这个特性,可以用来去重
和之前的非贪婪[a-z]{3,6}?相比,?用在一个范围{3,6}之前,而这里是用在一个确定的字符串前
边界匹配符
^ 加在字符串前面表示在字符转最开始匹配
$ 加在字符串后面表示在字符串末尾开始匹配
^开始边界
$结束边界
[0-9] 中的[-]代表的范围
{,}区间
因为qq有9位数,超过8位数,所以不能完整匹配,得不到组
[abc]: a或b或c
(abc):且关系 要求abc连续出现
匹配模式参数
匹配模式参数:使用re.findall方法的第三个参数设定匹配模式
补充概括字符集: . 匹配除换行符(\n)之外的其他所有字符
re.I:忽略大小写
re.S:匹配所有的字符包含换行符
re.sub 正则替换
re.sub(pattern, repl, string, count=0, flags=0)
pattern指待替换字符串
repl指将要被替换成的新字符串
string指字符串所在的变量
count指字符串被替换的次数,默认值0表示无限次替换,>0的整数表示被替换的有限次数
flags表示匹配模式参数
sub查找并替换(简单的字符串替换可以用字符串内置函数,如str.replace)
注:使用sub进行正则替换时可以传入函数来进行替换
matched = value.group()
* 需求:找出字符串s中的数字,>=6的用9替换,其他的用0替换
re.match
re.search
与findall的区别:
1、findall返回结果为 list,match和search返回为对象
.group() 获取对象内容
.span() 返回对象位置
2、match和 search只会匹配一次,无论成功与否,一旦匹配到结果就立即返回而不继续匹配
group() 分组
建议!
1、善用正则表达式解决字符串相关的问题
2、正则表达式和python主要应用场景 —— 爬虫和数据处理分析方面紧密相关
3、搜索“常用正则表达式”,建议直接使用以提高效率
四、JSON
是一种轻量级的数据交换格式
字符串是JSON的表现形式
符合JSON格式的字符串叫JSON字符串
跨语言数据交换
网友评论