cmd:
workon env1
pip install jupyter
jupyter notebook
import re 默认是非贪婪
贪婪模式:匹配成功的情况下的前提下,尽可能多的匹配(*)
非贪婪模式:匹配成功的情况下的前提下,尽可能少的匹配(?)
ab*(abbbb),ab*?(a),ab+?(ab)
正则表达式 |
一:Pattern实例对象也可以调用,二:re调用 |
1.match从头开始匹配 只匹配一个 得到Match对象可以使用group方法:group()返回所有匹配的值,可以使用group()分组匹配 start() end() span()返回索引的一个元组,最后一个取不到 |
2.search从出现的位置开始匹配,只匹配第一个 |
3.fullmatch从头匹配到尾,内容完全相同才可以匹配到 |
4.finditer返回迭代器,全文搜索匹配,每次出现都放入迭代器中,迭代器中每一个元素都是Match对象都有group方法 |
得到列表: |
5.findall可以匹配所有内容,全文搜索匹配,每次出现都放入列表中 |
6.split使用正则切割字符串 |
得到字符串: |
7.sub用新字符串替换能够被正则匹配的内容 sub(字符串或者函数,正则匹配的内容,count) |
编译模式:pattern = re.complite (r'\d+') |
complite 可以得到一个pattern模型,进而通过模型调用响应方法 |
Python通过re模块提供对正则表达式的支持。 |
使用re的一般步骤是先使用re.compile()函数, |
将正则表达式的字符串形式编译为Pattern实例, |
然后使用Pattern实例处理文本并获得匹配结果(一个Match实例), |
最后使用Match实例获得信息,进行其他的操作。 |
第三个参数flags作为可选参数: |
例如:flags = re.I|re.S|re.M |
| 表示同时使用 |
re.I 不区分大小写 |
re.S 单行模式,包括换行符,在单行模式下.符号可以匹配\n |
re.M 多行模式,("^"匹配字符串开始以及"\n"之后;"$"匹配"\n"之前以及字符串末尾) |
re.X 冗余模式,忽略正则表达式中的空白和#号的注释 |
字符匹配: |
. 匹配任意字符,不包括换行符 (单行模式下包括换行符) |
[] 可以匹配其中一个[0-9a-zA-z] |
\d 匹配所有的数字,即0-9 |
\D 匹配非数字 |
\s 匹配空格或者制表符Tab键,\t |
\S 匹配非空格和非制表符 |
\w 匹配字母a-z,A-z,0-9,_ |
\W 匹配非字母 |
多字符匹配,表示数量: |
* 可以匹配前一个字符出现 >=0 |
+ 可以匹配前一个字符出现 >=1 |
? 可以匹配前一个字符出现 0或1 |
{m} 可以匹配前一个字符出现 m次 |
{m,} 可以匹配前一个字符出现 >=m次 |
{m,n} 可以匹配前一个字符出现 m到n次,出现n次则匹配n,次数从多到少 |
表示边界: |
^ 以什么开头 |
$ 以什么结尾 |
\b 单词边界 |
\B 非单词边界 |
1.从这些分割的字符串中我们可以知道单词边界就是单词和符号之间的边界 |
这里的单词可以是中文字符,英文字符,数字;符号可以是中文符号,英文符号,空格,制表符,换行 |
空格并不是边界 空格与数字2之间的那个才叫边界 |
2.\b是单词与符号的边界 那非单词与符号的边界的其它都是\B |
所以我们的猜想\B是符号与符号,单词与单词的边界 |
匹配分组:编号和别名 |
\ 匹配左右任意一个表达式 |
(ab) 将括号中字符作为一个分组,利用group(数字)可以找到第几组匹配的内容 |
\num 引用分组num匹配到的字符串,(num表示第num个分组,\num表示第num个分组的内容相同) |
(?P<a>aaa).*(?P=a) aaa的别名为a,后面如果内容和aaa相同,可以用(?P=a)表示 |
group(数字)也可以用group(P=a) |