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') //返回 分组内 的 匹配到的数据
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') //返回 分组内 的 匹配到的数据