欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python分布式爬虫搜索引擎实战-1-正则表达式

程序员文章站 2022-05-23 10:54:18
...

正则表达式

比如: 一天前中提取出1

特殊字符:

  • ^:代表以该字符为开头。如^b就是b为开头。
  • .: 代表任意一个字符。如^b.就是b开头后面一个字母任意
  • *: 代表前一个字符可以出现任意次(0个也可以)。如^b.*就是b开头后面可有任意数个任意字母
  • $: 代表前一个字符为结尾符合。 如:.*3$就是以3为结尾的任意字符串
  • ?:非贪婪匹配。一般情况从右往左匹配正则,?可以实现从左往右,非贪婪指遇到第一个就结束。.*?(b.*?b).*就是首先开始的b和b之间的字符串
  • +: 代表前面的字符至少出现一次(0个到无数个)。如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: 匹配数字

example 提取出生日期

# _*_ coding: utf-8 _*_
__author__ = 'mtianyan'
__date__ = '2017/3/26 13:13'

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))