正则表达式
想学爬虫不想学正则可以不可以:不可以。
比如:
1天前
中提取出1
,必须使用正则实现
特殊字符:
-
^
:代表以该字符为开头。如^b
就是b为开头。 -
.
: 代表任意一个字符。如^b.
就是b开头后面一个字母任意 -
*
: 代表前一个字符可以出现任意次(0个也可以)。如^b.*
就是b开头后面可有任意数个任意字母 -
$
: 代表前一个字符为结尾符合。 如:.*3$
就是以3为结尾的任意字符串 -
?
:非贪婪匹配。一般情况从右往左匹配正则,?
可以实现从左往右,非贪婪指遇到第一个就结束。.*?(b.*?b).*
就是首先开始的b和b之间的字符串 -
+
: 代表前面的字符至少出现一次(1个到无数个)。如b.+
指b后面至少一个任意字母 -
{2}
{2,5}
{2, }
: 代表前面的字符出现2次。代表前面的字符出现2到5次. 代表前面字符出现2次及两次以上 -
|
:代表或
的意思 b|c,从左到右,看先匹配到那个。 -
()
: 代表子字符串。如((a|b)123)代表group(1)为外层括号里的a123|b123;group(2)为内层括号值 -
[]
: 代表[]内的字符满足任意一个都可以。1 :[abcdefg]123代表以里面任意abcdefg中一个字母开头的都可以
2:[0-9]
[a-z]
代表可以为0-9范围内任意一个字符,代表a-z范围任意一个字符 3: [^1]^
为取反,只要不等于1就可以
注: 进入[]的字符都不再具有特殊含义[._]就指匹配到.或者_
-
\s
\S
: 1:\s
代表匹配到一个空格。2:\S
代表匹配到一个非空格 -
\w
\W
: 匹配单词字符[a-zA-Z0-9_]/非单词字符 -
[\u4E00-\u9FA5]
: 匹配中文汉字 -
\d
: 匹配数字
提取出生日期
# _*_ coding: utf-8 _*_
import re
line = "XXX出生于2001年6月"
# line = "XXX出生于2001/6/1"
# line = "XXX出生于2001-6-1"
# line = "XXX出生于2001-06-01"
# line = "XXX出生于2001-06"
regex_str = ".*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}日|[月/-]\d{1,2}|[月/-]$|$))"
match_obj = re.match(regex_str, line)
if match_obj:
print (match_obj.group(1))