正则表达式与Python语言

来源:互联网 发布:物业投标书网络范围 编辑:程序博客网 时间:2024/05/17 03:28

简单介绍一下Python中的默认正则表达式模块re模块


函数/方法

描述

compile(pattern,flags=0)

对正则表达式pattern进行编译,flags是可选标志符,并返回一个regex对象

match(pattern,string,flags=0)

尝试用正则表达式模式pattern匹配字符串string,flags是可选标志符,如果匹配成功,则返回一个匹配对象;否则返回none

search(pattern, string, flags=0)

在字符串string中查找正则表达式模式pattern的第一次出现,flags是可选标志符,如果匹配成功,则返回一个匹配对象;否则返回none

findall(pattern, string[,flags])

在字符串string中查找正则表达式模式pattern的所有(非重复)出现;返回一个匹配对象的列表

finditer(pattern,string[,flags])

和findall()相同,但返回的不是列表而是迭代器;对每一个匹配,该迭代器返回一个匹配对象

split(pattern, string, max=0)

根据正则表达式pattern中的分隔符把字符string分割为一个列表,返回成功匹配的列表,最多分割max次(默认是分割所有匹配的地方)

sub(pattern, repl, string, max=0)

把字符串string中所有匹配正则表达式pattern的地方替换成字符串repl,如果max的值没有给出,则对所有匹配的地方进行替换(也可以参考subn())

group(num=0)

返回全部匹配对象(或指定编号是num的子组)


  • 用match()匹配字符串

即便字符串比模式要长,匹配也可能成功;只要模式是从字符串的开始进行匹配的。也可以利用面向对象的特性,间接省略中间结果:



  • search()在一个字符串中查找一个模式 (搜索与查找的区别)


match()尝试从字符串起始处进行匹配模式。search()查找字符串模式首次出现的位置,从左到右进行搜索

  • 匹配多个字符串(|)


  • 匹配任意单个字符(.)



在正则表达式里,如果我们需要真正去匹配含‘.’的字符,可以用‘\’转义字符


  • 创建字符集合([ ])


  • 重复,特殊字符和子组
以域名为例,我们想要找到一个xxx.com域名的网站,可能不止希望匹配出xxx.com, 还需要匹配出www.xxx.com。这种情况下,我们可以使用正则表达式中的‘?’来表示某部分是否可选,也可以用‘*’来表示多个可选部分。



我们可以用正则表达式来分别提取需要匹配的字符段,并存入每个子组。



  • 从字符串的开头或结尾匹配及在单词边界上的匹配

下面介绍了锚点性正则表达式操作符。这些锚点性正则表达式操作符主要被用于搜索而不是匹配。


  • 用findall()找到每个出现的匹配部分

findall()用于非重叠地查找某字符串中一个正则表达式模式出现的情况。findall()和search()相似之处在于二者
都执行字符串搜索,但findall()和match()与search()不同之处是,findall()总返回一个列表。如果findall()没有
找到匹配的部分,会返回空列表;如果成功找到匹配部分,则返回所有匹配部分的列表。




  • 用sub(),subn() 进行搜索和替换

有两种方法用于完成搜索和替换的功能:sub() 和subn()。两者基本是一致的,都是将某字符串中所有匹配正则表达式模式的部分进行替换。 subn()和sub() 一样,不过它会返回一个表示替换次数的数字,替换后的字符串和表示替换次数的数字作为一个元组的元素返回。

  • 用split()分割


re模块和正则表达式对象的方法split()与字符串的split()方法相似。如果不想在每个模式匹配的地方都分割
字符串,可以通过设定一个值参数来指定分割的最大次数。




我们可以发现re.split()是一个非常强大的工具,我们可以用它来分析一个linux查询登录用户的数据。


我们先看一下在linux上运行who之后的内容,我把结果存到一个txt文件里

wesc  pts/0        2017-12-19 15:31 (10.255.6.83)wesc  pts/1        2017-12-19 10:18 (10.255.6.18)wesc  pts/3        2017-12-19 13:31 (10.255.6.39)wesc  pts/4        2017-12-19 15:36 (10.255.6.83)wesc  pts/5        2017-12-19 15:39 (10.255.6.76)wesc  pts/6        2017-12-19 15:48 (10.255.6.34)

对这个文件进行分析

#!/usr/bin/ env python#coding=utf-8import ref = open('whodata.txt', 'r')lines = f.readlines()for eachLine in lines:    print (re.split('\s\s+', eachLine))f.close()

运行一下得到输出:

['wesc', 'pts/0', '2017-12-19 15:31 (10.255.6.83)\n']
['wesc', 'pts/1', '2017-12-19 10:18 (10.255.6.18)\n']
['wesc', 'pts/3', '2017-12-19 13:31 (10.255.6.39)\n']
['wesc', 'pts/4', '2017-12-19 15:36 (10.255.6.83)\n']
['wesc', 'pts/5', '2017-12-19 15:39 (10.255.6.76)\n']
['wesc', 'pts/6', '2017-12-19 15:48 (10.255.6.34)']

Process finished with exit code 0

原创粉丝点击