Python_正则表达式及JSON

2018-07-19  本文已影响134人  西瓜超人励志要变小细腿

一、正则表达式

正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列相匹配。

快速检索文本、实现一些替换文本的操作:

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字符串

跨语言数据交换

反序列化

反序列化

序列化

上一篇下一篇

猜你喜欢

热点阅读