美文网首页
python 之正则匹配

python 之正则匹配

作者: 爱学习的代代 | 来源:发表于2018-10-18 09:11 被阅读21次

使用Python内置的re模块 import re
1、常用的匹配规则

一、普通字符
.  匹配除换行符"\n"外的字符   a.c ==> abc、amc
\  转义字符,使后一个字符改变原来的意思  a\.c  ==> a.c    a\\c ==> a\c
*  匹配前一个字符0次或多次            abc*  ===>  ab、 abc、 abccc
+  匹配前一个字符1次或无限次    (比* 更为严格,属于 * 的子集) abc+ ==> abc、 abcccc
? 匹配一个字符0次或1次               abc? ==> ab、 abc
^  匹配字符串开头。在多行模式中匹配每一行的开头
$  匹配字符串末尾,在多行模式中匹配每一行的末尾
{} {m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次  eg: \d{11} ==> 13311907472
() 分组表达式作为一个整体
================================================================================
二、预定义字符集
\d  数字 0-9    eg:a\dc  ==> a1c 、 a9c
\D  非数字      eg:a\Dc  ==> abc
\s  任何空白字符 eg:a\sc ==> a c
\S  非空白字符   eg: a\Sc ==> abc
\w  含下划线在内的任何字符  a\wc ==> a_c
\W  匹配非字母字符,即匹配特殊字符 a\Wc ==> a&c

2、re.match函数: 尝试从字符串的起始位置匹配一个字符串,如果不是起始位置匹配成功的话,match()就返回None

re.match(pattern, string, flag=0)

 1.pattern 要匹配的正则表达式
 2.要匹配的字符串儿
 3.标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等。

返回值:匹配成功 re.match方法返回一个匹配的对象,否则返回None
#group 函数 group() 返回re整体匹配的字符串。
#re.match()只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
#re.search()匹配整个字符串,直到找到一个匹配
#re.findall()遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。

说明: flag :re.I 是匹配对大小写不敏感

3、实战练习,模糊匹配身份证号、邮箱地址

#a、匹配一个网址
r_web = r'[a-zA-Z]*://[^\s]*'
test_string = 'Its after 12 noon, do you know where your rooftops are? https://www.baidu.com'
url = re.search(r_web, test_string).group()
print(url)

#b、匹配一个身份证号码
# 第一位表示 [1-6]
# 第2-6位 表示[0-9]{5} 或者\d{5}
# 第7位:年份第一位   [12]   1993 或者 2008
# 第8,9,10位: 年份后三位  [0-9]{3} 或者\d{3}
# 第11,12位 月份 (0[1-9]|1[12])
# 第13,14位 日   (0[1-9]|1[0-9]|2[0-9]|3[01])
# 第15,16,17位校验码 [0-9]{3} 或者\d{3}
# 第18位 校验码 [0-9]|X|x或 (\d|X|x)

r = r'^[1-6]\d{5}[12]\d{3}(0[1-9]|1[12])(0[1-9]|1[0-9]|2[0-9]|3[01])\d{3}(\d|X|x)$'

idNumber = re.match(r, '41232519950612123X').group()

print(idNumber)

#c、匹配一个邮箱 xxx@yyy.com、xxx@yyy.cn、 xxx@yyy.net
#在findall中存在括号会返回元组
# xxx 包含下划线在内的所有字符\s{0,19}
# yyy 字母跟数字{1,13}
# com、cn、net  [com,cn,net]
r_mail = r'\S{3,19}@[0-9A-Za-z]{1,13}\.[com,cn,net]{1,3}'
r_mail = r'[^\s]{3,19}@[0-9A-Za-z]{1,13}\.[com,cn,net]{1,3}'


email = re.search(r_mail,'peter.dai@163.com').group()
print(email)

实际结果:


result.png

相关文章

  • python爬虫之正则表达

    python爬虫之正则表达 概述 这部分主要讲的是python中的re模块。 最简单的正则表达就是普通字符串的匹配...

  • python 正则匹配中文

    # python 正则匹配中文 >``` #!/usr/bin/env python # -*- coding: ...

  • python正则匹配

    python正则匹配规则和一个小实例 python正则匹配规则 正则小栗子 获取一个页面的网页信息 比如我要获取简...

  • python 之正则匹配

    使用Python内置的re模块 import re1、常用的匹配规则 2、re.match函数: 尝试从字符串的起...

  • Django URL传参

    1. 正则表达式匹配传参: 链接网页形如:/list/python/时,通过正则表达式匹配到字符串"python"...

  • RegExp Cheatsheet

    正则匹配技巧 使用python包re 基本函数 re.match(正则表达式, 原字符串) 从最开始匹配,但只匹配...

  • 判断一个字符串是否是合法ip

    此题目可以使用正则表达式匹配或者字符串匹配方法进行判断 思路: python2.7正则表达式解法: python2...

  • Python正则表达式(二)正则匹配模块re

    请移步我的个人博客:Python正则表达式(二)正则匹配模块re

  • 20.Python之正则表达式

    Python之正则表达式 正则表达式什么是正则表达式?正则表达是一套匹配字符串的通用规则,很多开发语言中都有。为什...

  • Python正则匹配

    背景:匹配某字段是否含有单个或多个特定关键词 一、单一匹配 样例:2476401041436860373259需求...

网友评论

      本文标题:python 之正则匹配

      本文链接:https://www.haomeiwen.com/subject/mqfjzftx.html