正则表达式
正则的用处:python的网页爬虫中用的相当多
写正则表达式的整体思路:
首先把你要匹配的字符串粘过来,然后把里面共性的东西留着,空格换成\s,其他的可变字符串替换成各种匹配,然后那些不变的部分留着就行了。
pattern
元字符 | 说明 |
---|---|
. | 所有 |
\b | begin,匹配单词开始 |
^ | 匹配一行的开始 |
$ | 匹配一行的结束 |
\d | digital,数字 |
\w | word,匹配数字字母下划线汉字,什么都能匹配 |
\s | 匹配空格 |
\ | 转义符 .*\ 这些用 |
.
匹配任意
字符集
:[12] 中括号是字符集
,匹配中括号中任意字符中的一个,这个表达式匹配1或者2,只匹配一个
[0-9]
就相当于\d
这个[]这里还要多写一点,因为[]里面无限装东西,而含义就是这个字符集相当于里面装的所有东西的其中一种,就有一个或的意思在里面。如果是两个表达式来取或的话,就用|
。
次数:
*0或多个
+至少一个
数量词
:[0-9]{4}
,匹配四位数,大括号套起来就是次数
[0-9]{4,6}
这个是贪婪匹配,比如要被匹配的字符串一共就六个数字,那这肯定就都匹配了,先从上限开始找
[0-9]{4,6}?
这个等同于[0-9]{4}
,后面带了一个问号之后,就不敢多要了,大括号成了废话。
分组()
分组是括号,只要看见括号,而且这个括号前面还没有转义符的话,且括号后面跟的是大括号,比如
([1-9].){3}
这种小括号大括号连着用的结构,相当方便断句啊!
分组的别名
如果分组太多,不命名不好调用。问号尖括号连用,外面用小括号包着,只要看见这个小括号跑不了就是分组,例如:
(?<name1>([1-9].){3})
(?<name1> exp )
如果尖括号前面不带问号的话,这个<>本身就不构成语法。
分组这个东西,有了括号之后,就方便把这个组的取值拉出来,(?<> xxxx)这种表达式,把问号尖括号去掉之后,其他的仍然是一个正常的正则分组。
分组表达式取反
分组取反
问号冒号连用
(?: exp),(?:([1-9].){3})
这个取到的是上面这个表达式没匹配到的部分,问号冒号连用没法命名
贪婪匹配与懒惰匹配
贪婪比如 .*1
,*就是贪婪,流星碎片,尽可能多的去匹配
懒惰 .*?1
,?就是懒惰,尽可能少的去匹配
这两个中,都是匹配xxxxx1,不过第一个要匹配到最后一个1,第二个到第一个1就停了。
(问号, 表示一点贪婪之后???)
网友评论