正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
非打印字符
特殊字符
所谓特殊字符,就是一些有特殊含义的字符,如上面说的runoo*b
中的*
,简单的说就是表示任何字符串的意思。如果要查找字符串中的*
符号,则需要对*
进行转义,即在其前加一个:
runo*ob
匹配runo*ob
。
许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符放在它们前面。下表列出了正则表达式中的特殊字符:
特别字符 | 匹配自身 |
---|---|
. | 匹配任意除换行符
外的单字符 在DOTALL模式中也能匹配换行符 |
转义字符,使后一个字符改变原来的意思 | |
* | 匹配前一个子表达式0或多次 |
+ | 匹配前一个子表达式1次或无限次 |
? | 匹配前一个子表达式0次或1次,或指明一个非贪婪限定符 |
^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用, 当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合 |
$ | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配' '或' ' |
| | 或。匹配|左右表达式任意一个, 从左到右匹配,如果|没有包括在()中, 则它的范围是整个正则表达式 |
{} | {m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次, 若省略n,则匹配m至无限次 |
[] | 字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出, 也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。 所有特殊字符在字符集中都失去其原有的特殊含义。 用反斜杠转义恢复特殊字符的特殊含义。 |
() | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用 |
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
*={0,}
+={1,}
?={0,1}
{n} 匹配确定的n次
{n,} 至少匹配n次 'o{1,}' = 'o+' and 'o{0,}' = 'o*'。
{n,m}
*
和+
限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?
就可以实现非贪婪或最小匹配。
<h1>RUNOOB-菜鸟教程
贪婪:下面的表达式匹配从开始小于符号 (<) 到关闭 h1 标记的大于符号 (>) 之间的所有内容。
/<.*>/
<h1>RUNOOB-菜鸟教程</h1>
非贪婪:如果您只需要匹配开始和结束 h1 标签,下面的非贪婪表达式只匹配 <h1>。
/<.*?>/
<h1> #也可以使用/<w+?>/来匹配 h1 标签
re.match
re.match(pattern, string, flags=0)
re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
如果匹配成功,re.match方法返回一个匹配的对象,否则返回None。
可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
group(num=0)
匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups()
返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。