正则表达式基础
正则表达式是在字符串中查找你需要的字符串,类似c++的find函数,但是他在不同的语言中有着相似(几乎不变的)语法,具体可以看:
https://www.runoob.com/regexp/regexp-metachar.html
下面仅记录一下最最基础的
(有bf还会用这?当初为什么要先看这个???)
(回来再看这句话,真香)
正则表达式首先要import re
查找的函数有:
re.findall(规则,str)
检索到字符串末尾而不是,返回一个list
t=re.search(规则,str)
返回一个re.Match类
t.span()是输出第一个满足条件字符串前闭后开的区间
t.start() ...起始位置
t.end() 终止位置
t.group()是直接返回字符串
+ :重复匹配前一个字符一次 或多次
* :重复匹配前一个字符零次 或多次
? :重复匹配前一个字符零次或一次 (也有许多特殊的用途
. :可以代表任意字符,(一般不特殊声明不能代表\n)
查url用 .*?即可 (这里?代表非贪婪,(就是只匹配到第一个满足 .*)
比如
s16.analyse=null;s16.answer=false;s16.content=\"<p><img src=\"http://edu-ixxx\\\" /></p>\";s16.id=217706595887825;s17.analyse=null;s17.answer=true;s17.content=\"<p><img src=\\\"http://edu-ixxx\" /></p>\";s17.id=17706595887825;s18.analyse=null;s18.answer=false;s18.content=\"<p><img src=\\\"http://exxx\\\" /></p>\";
reg='<p>.*?<\p>' 就不会匹配到第一个<p>到最后一个<\p>中间的东西,而是第一个<p>与第一个<\p>中间的东西
\n回车\r换行(回车不代表换行),\t制表(tab)等代表他们原本的意思
\b 代表匹配单词结尾 空格,和字符串结尾(\0?)
\d 对应匹配的是0~9的数字
比如 x\d 则是匹配第一个x后面是数字的字符串
而x\d+是匹配所以x后面是数字的字符串
import re #r类似以只读模式打开 reg1=r'c\d' reg2=r'c\d+' reg3=r'c\d*' reg4=r'c\d?' reg5=r'd\b' str='ad qcdac134c13' print(re.findall(reg1,str)) ['c1', 'c1'] print(re.findall(reg2,str)) ['c134', 'c13'] print(re.findall(reg3,str)) ['c', 'c134', 'c13'] print(re.search(reg4,str)) <re.Match object; span=(3, 4), match='c'> print(re.findall(reg5,str))#匹配不到第二个d(后面没有空格) ['d']
[]:是匹配里面字符的任意一个 如果里面的ascii连续可以用-代替比如[a-z,0-8] 只能是1位字符不能是11-12这种
\s : 匹配任何空白字符 相当于 [\t \n \r \f \v \x20] \x20是空格
\w :匹配包括下划线在内的单词字符 相当于[a-zA-Z0-9_] 中文居然也算!
^ : if出现在[]的第一个则代表[]里的在其后面的取反相当于c++中的 “!”
$ :匹配前一个字符在字符串结尾的位置 通常用search
[\u4e00-\u9fa5] 匹配一个中文字符 若要匹配句字则
可用([\u4e00-\u9fa5]+)
相反 [^\u4e00-\u9fa5]+可以匹配非中文字符
reg1=r'd\b' reg2=r'\w+' reg3=r'^q' reg4=r'[\u4e00-\u9fa5]+' str='ad qc dac134c13 撒发顺丰' print(re.findall(reg1,str)) ['d'] print(re.findall(reg2,str)) ['ad', 'qc', 'dac134c13','撒发顺丰'] print(re.findall(reg3,str)) [] print(re.findall(reg4,str)) ['撒发顺丰']
():可以看成整体通常与其他符号搭配使用
进阶正则可以看https://www.runoob.com/python/python-reg-expressions.html