python中使用 正则表达式

0更新.
r可以忽略用'\'代替'\\',u可以把引号里面的字符转成unicode编码,这两步都需要的时候就在引号前面输入ur,而ru就报错
u'[^a-zA-Z0-9\u4e00-\u9fa5\x00-\xff]+'可匹配中文单词数字
中文utf-8范围是\u4e00-\u9fa5
中文gbk范围是\x00-\xff
u不可省略因为这里是依据unicode码匹配的,同样也要将匹配的字符串解码为unicode
p_o = re.compile(u'&[a-zA-Z;]+?;')可以匹配所有html的转义字符
re.compile('content="([\w\W]*?)"',re.I)可以忽略大小写的匹配所有字符,包括换行
headtext.encode('unicode-escape').decode('string_escape').decode('gbk')可以先取消字符前的转义然后取消转义的声明


正则表达式:
正则表达式(RE)是一种小型的、高度专业化的编程语言,它内嵌在python中并通过 re 模板来实现
你可以为将要匹配的字符串指定规则,可以确定字符串是否或部分匹配该模式吗,或者利用 RE 的各种方法分割或修改字符串

字符匹配:
元字符的完整列表:. ^ $ * + ? { [ ] \ | ( )
[]:指定一个字符类别,可列出也可用 - 分割两个字符来表示区间 (所有的小写字母)[a-z] == [abcdefghijklmnopqrstuvwxyz],元字符在类别里并不起作用。可以用补集来匹配不在区间内的字符 [^5]
特例[^]在开头 == 非  不在开头是普通字符 反斜杠使之取消

反斜杠"\":反斜杠可以加不同的字符表示特殊含义,可以取消元字符
预设的特殊字符:
\d 匹配10进制数
\D 匹配非数字字符
\s 匹配任何空白字符,相当于 [\t\n\r\f\v]
\S 匹配任何非空白字符,相当于 [^\t\n\r\f\v]
\w 匹配任何字母、数字字符 相当于 [a-zA-Z0-9_]
\W 匹配任何非字母、数字字符 相当于 [^a-zA-Z0-9_]
\u4e00-\u9fa5 匹配汉字
.  匹配除了换行字符外的任何字符。"." 通常被用于你想匹配“任何字符”的地方。在 alternate 模式(re.DOTALL)下它甚至可以匹配换行
特殊字符都可以包含在一个字符类中。如,[\s,.]

元字符
"^..." 匹配字符在开头位置, "...$"匹配字符在末尾
正则表达式第一件能做的事是能够匹配不定长的字符集,另一个功能就是你可以指定正则表达式的一部分的重复次数.
* 并不匹配字母字符 "*";指定前一个字符可以被匹配零次或更多次,而不是只有一次。  
+ 匹配一或更多次。
像 *,+ 这样地重复是“贪婪的”;当重复一个 RE 时,匹配引擎会试着重复尽可能多的次数。如果模式的后面部分没有被匹配,匹配引擎将退回并再次尝试更小的重复。
? 匹配一次或零次,可以认为它用于标识某事物是可选的:home-?brew 匹配 "homebrew" 或 "home-brew"。
非贪婪模式:在重复后加?匹配将匹配最小适合字符串
{i(0),j(无穷大=20亿)} 匹配i~j次。 {i} 重复i次

反斜杠的麻烦 =。= (为了匹配反斜杠而用反斜杠来用4个取消1个的特殊意义)
字符            阶段
\section         要匹配的字符串
\\section        为 re.compile 取消反斜杠的特殊意义
"\\\\section"    为"\\section"的字符串实值(string literals)取消反斜杠的特殊意义
解决:用 Python 的 raw 字符串表示。
import re
re.findall(r1,'........')
==
p_arv=re.compile(r1)  //编译正则提高效率
p_arv.findall('........')
p_arv=re.compile(r1,re.I) //不区分大小写

函数:
匹配方法
x = re.match()
if x :
    pass          //是否在开头匹配  TRUE:返回一个 `MatchObject` 实例  FALSE:返回空
x = re.search()
if x :
    pass         //扫描整个串完成匹配   TRUE:返回一个 `MatchObject` 实例  FALSE:返回空
re.findall()      //返回匹配到的列表
x = re.finaiter  //返回一个迭代器对象
x.next()         //返回一个 `MatchObject` 实例
x.group()         //返回一个 `MatchObject` 实例所匹配的数据
x.strat()       //返回匹配开始的位置
x.end()         //返回匹配结束的位置
x.span()        //返回匹配的位置

替换方法
re.sub('a...c','python')   //将满足axxxc的数据替换成pyhton
re.subn('a...c','python')    //返回替换之后的数据和替换次数

分割方法
re.spilt(r'[\+\-\*]',str)        //以 + - * 分割字符串,返回分割后的列表

正则表达式的内置属性
re.findall(r1,str,s)   //s:使.能匹配包括\n的所有字符
re.findall(r1,str,re.I)   //re.I:不区分大小写
re.findall(r1,str,re.M)   //re.M:多行匹配:当本标志指定后, "^" 匹配字符串的开始和字符串中每行的开始,\A匹配字符串首;同样的, $ 元字符匹配字符串结尾和字符串中每行的结尾(直接在每个换行之前),\Z匹配字符串尾。
re.findall(r1,str,re.X)
x = re.compile(r1,re.X)   //re.X:取消多行正则的换行符:当该标志被指定时,在 RE 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之后;

分组 分组(因为很重要所以要重复两遍)
email = r'\w+@\w+(\.com|\.cn)'
re.findall(email,'547544429@qq.com')      //返回 分组内 的 匹配到的数据


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值