美文网首页
Python之re模块

Python之re模块

作者: 小飞船1号 | 来源:发表于2020-10-15 11:02 被阅读0次

一、正则表达式

re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,
而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

  • re模块是python独有的
  • 正则表达式所有编程语言都可以使用
  • re模块、正则表达式是对字符串进行操作
(一)常用正则

1、字符组
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示

正则 说明
[a-z] 匹配所有的小写字母
[A-Z] 匹配所有的大写字母
[0-9] 匹配所有的数字

2、字符

元字符 匹配内容
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\n 匹配一个换行符
\t 匹配一个制表符
\b 匹配一个单词的结尾
^ 匹配字符串的开始
$ 匹配字符串的结尾
\W 匹配非字母或数字或下划线
\D 匹配非数字
\S 匹配非空白符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示一个组
[...] 匹配字符组中的字符
[^...] 匹配除了字符组中字符的所有字符

3、量词
贪婪模式:(按照对大情况匹配)

量词 用法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
\1 \2 表示前面第一个名为1的分组,和第二个小括号的分组

4、例子
(1)非
^(?!.*200).*$,只匹配200
^(?!.*[200|400]).*$,只匹配200和400
(2)\u4e00-\u9fa5 中文


二、re模块

(一) r表示:不允许字符串进行转义
a="\\hello"
b=r"\\hello"
print(a)
print(b)
# \hello
#\\hello
(二)常量、属性
修饰符 描述
re.I(re.IGNORECASE) 使匹配对大小写不敏感
re.L(re.LOCALE) 做本地化识别(locale-aware)匹配
re.M(re.MULTILINE) 多行匹配,影响 ^ 和 $
re.S(re.DOTALL) 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
(三)函数
1、re.compile(pattern[, flags])

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用

  • pattern : 一个字符串形式的正则表达式
  • flags : 可选,表示匹配模式,比如忽略大小写,多行模式等具体为:re.I、re.L 、re.M 、re.S 、re.U 、re.X
2、re.match(pattern, string, flags=0)

match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

  • pattern :匹配的正则表达式
  • string: 要匹配的字符串。
  • flags : 可选,表示匹配模式
3、re.search(pattern, string, flags=0)

search 扫描整个字符串并返回第一个成功的匹配。

  • pattern :匹配的正则表达式
  • string: 要匹配的字符串。
  • flags : 可选,表示匹配模式

re.match与re.search的区别:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

4、 re.sub(pattern, repl, string, count=0, flags=0):正则表达式替换函数
  • pattern:模式串
  • repl:需要替换成的字符串或函数
  • string:需要被替换的字符串
  • count:替换次数
  • 特殊用法:\数字\g<数字>表示前面pattern里面第数字个分组,需要和r'\数字'联用,否则不好用,\g<0>,\0代表前面pattern匹配到的所有字符串。
import re
text="2020年10月14日"
text=re.sub(r"[\u4e00-\u9fa5]","-",text,2).strip("日")
#2020-10-14

c= 'abc124hello46goodbye67shit'
c=re.sub(r'\d+[hg]', 'foo1', c)
# abcfoo1ellofoo1oodbye67shit

a1 = re.sub('(\d{2})-(\d{2})-(\d{4})', r'\3-\1-\2', '06-07-2018')
a2 = re.sub('(\d{2})-(\d{2})-(\d{4})', r'\g<3>-\g<2>-\g<1>', '06-07-2018')
a3 = re.sub(r'(\d{4})(\d{2})(\d{2})', r'\1-\2-\3', '20201010')
#a1=2018-06-07
#a2=2018-06-07
#a3=2020-10-10
def replace_num(str):
    numDict = {
        "0": "〇",
        "1": "一",
        "2": "二",
        "3": "三",
        "4": "四",
        "5": "五",
        "6": "六",
        "7": "七",
        "8": "八",
        "9": "九",
    }
    #要用.group()取文本,因为是匹配出来的是对象
    print(str.group())
    return numDict[str.group()]
my_str = "2018年6月7号"
a = re.sub(r"(\d)", replace_num, my_str)
print(a)  
# 二〇一八年六月七号,每次匹配一个数字,执行函数,获取替换后的值
5、re.split(pattern, string, maxsplit=0)
  • 多个 分隔符,切割功能非常强大
  • 通过正则表达式将字符串分离。
  • 如果用括号将正则表达式括起来,那么匹配的字符串也会被列入到list中返回。
  • maxsplit是分离的次数,maxsplit=1分离一次,默认为0,不限制次数。
    (1) 单字符切割:
re.split(';',line)
['aa bb cc dd', ' ee ff. gg- hh ii kk']

(2) 两个字符以上切割,放在 [ ]中(不保留分隔符):

re.split('[;.-]',line)
['aa bb cc dd', ' ee ff', ' gg', ' hh ii kk']

(3) 使用( )捕获分组(保留分割符):

re.split('([;,])',line)
['aa bb cc dd', ';', ' ee ff', '.', ' gg', '-', ' hh ii kk']
def process(text):
    """
    eg:安徽省住房和城乡建设厅党组书记、厅长  赵馨群
    eg:省工商局局长 朱斌  省商务厅副厅长 乔兴力
    空格分割,多个的,长多于3的不要
    """
    import re
    res=text.split()
    print(res)
    if len(res)>1:
        return [i.replace(" ", "") for i in res if 1 < len(i) < 4]
    if len(res)==1:
        return [i.replace(" ", "") for i in res]
    else:
        return text
6、findall(string[, pos[, endpos]])

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。

  • string : 待匹配的字符串。
  • pos : 可选参数,指定字符串的起始位置,默认为 0。
  • endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。
7、方法
  • group([group1, …]):方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);
  • groups() :返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
  • start() :返回匹配开始的位置
  • end() :返回匹配结束的位置
  • span() :返回一个元组包含匹配 (开始,结束) 的位置

相关文章

  • 21.Python之re模块

    Python之re模块 re模块介绍re 模块使 Python 语言拥有全部的正则表达式功能。 re模块的内置方法...

  • re

    python模块之re re:官方文档是最好的模块表达说明。 Regular expression operati...

  • Python ☞ day 11

    Python学习笔记之 正则表达式 re模块概述:Python自1.5以后增加了re的模块,提供了正则表达式模式...

  • python(学会正则走天下)

    python通过re模块来实现。本篇文章着重对Python的RE进行介绍re 模块首先通过 re.compiler...

  • Python 脚本之统计基因组文件中染色体长度及N碱基数目

    模块介绍 re模块 re模块是Python中的正则表达式调用模块,在python中,通过将正则表达式内嵌集成re模...

  • Python之re模块

    一、正则表达式 re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则...

  • Python之re模块

    import re不要起一个.py的名字, 这个名字和模块名不能同名 findall 匹配所有 每一项都是列表的一...

  • python正则表达式

    re模块Python增加了re模块使python语言拥有全部正则表达式的功能。re.match(pattern,s...

  • python --正则表达式-re模块

    所有关于正则表达式的操作都使用 python 标准库中的 re 模块。 Python中的re模块 re.compi...

  • Python 正则表达式——re模块介绍

    Python 正则表达式 re 模块使 Python 语言拥有全部的正则表达式功能,re模块常用方法: re.ma...

网友评论

      本文标题:Python之re模块

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