正则表达式-实践-初稿

来源:互联网 发布:小蚁 知乎 编辑:程序博客网 时间:2024/06/13 08:17

一、目前自己关于正则表达式的理解

1、什么是正则表达式,正则表达式有什么用?

正则表达式主要是用来做字符匹配的,有一套自己的匹配规则,目前基本上所有的高级语言(Java)、脚本语言(perl)、文本编码器(txteditplus)和办公软件(excel)都支持正则表达式。

 

正则表达式主要就是制定一套字符的规则,然后验证当前的字符串是否满足该规则,并且能从中提取需要的字段及信息。

如:匹配一个URL(http://www.baidu.com)

 

2、正则表达式的格式

正则表达式是通过一系统的特殊字符或者符号来表示某些含义(如:数字用什么表示、字符用什么表示等)

 

正则表达式包含匹配的内容及次数等:

内容:数字、字符、特殊符号(如:空格等)

重复次数:如某些字符出现多于一次、或者(0-n)次等。

位置:以什么开头,以什么结尾等;

关系符:!等(猜测) --目前没有看到有该用法

分组:标记某些部分的规则为一组,方便该正则表达式其它地方进行引用,可以采用下标索引方式进行引用,也可以采用取别名的方式进行引用。

 

3、目前正则表达式的一些用途

(1) 传统:用于一些字符的匹配,如果URLIP地址等;

(2) 大数据:用于在ETL阶段进行数据清洗,匹配相应的字符串,并且从中提取有价值的字段或信息;

(3) 爬虫:目前爬虫进行爬取数据的时候,需要从一个网页的海量数据中匹配信息进行提取;

 

实践:先找视频,直接进行基本实践

二、慕课网正则表达式的学习(python)

http://www.imooc.com/video/10506

1、正则表达式介绍

主要讲解了什么是正则表达式,正则表达式的作用以及使用的场景

(1) 正则表达式其实就是表达一个字符串的规则(比如:一个汽车有4个轮子和一个方向盘),然后验证当前的字符串是否满足这个规则(比如:根据该规则来判断该物品是否是一个洗车)

(2) 其实该工作也可以采用传统的编码方式来实现(一般的语言都是提供一些字符串操作的函数,如:startwith(), endwith()),但是如果采用这种编码方式不仅要针对每个规则写一些函数,而且有的字符串操作的函数还不太丰富,写起来会比较麻烦。

(3) 对一些数据的处理比较多的场景使用比较平凡,如果爬虫项目等;

 

2、python正则表达式之re模块1

介绍了python中的正则表达式模块re,其主要包含PatternMatch两个模块,Pattern相当于正则表达式的规则,Match相当于正则表达式匹配字符串的结果,Match还提供了一函数,可以查看需要匹配的字符串和相应的正则表达式,并且还可以查看匹配的字符串及相应的索引等,大概的操作步骤如下:

re.compile(“正则表达式”):根据相应的正则表达式生成一个pattern对象 ;

Pattern.match(“待匹配的字符串”):根据待匹配的字符串生成一个Match对象(如果没有匹配上则结果为none)

 

3python正则表达式之re模块2

主要讲解了re模块的一些相对高级的用法:

Pattern.match():还可以传入一些其它的参数,如果是否忽略大小写等;

Re.match():可以直接通过该方法生成Match对象,需要同时传入正则表达式和等匹配的字符串等。

如果需要多次使用pattern对象则可以先通过re.compile()生成Pattern对象,否则可以考虑直接通过re.match()方法生成Match对象。

 

4、python正则表达式语法1(匹配单个字符)

主要讲解正则表达式如何表示单个字符

. :除/n之外的任意一个字符;

[...] :中括号中表示的是一个字符集,其含意为匹配中括号字符集中的任意一个字符;

\d / \D :表示数字[0-9] \非数字;

\s / \S :表示空白(space) \非空白;

\w / \W :表示单词(word)[0-9a-zA-Z] \非单词;

注意:其中的小写字母和大写字母的区别是取反的意思,小写的字母表示正常的含义,大写的字母表示在小写字母的基础上取反的意思。

 

个人的思考及总结:以上都是匹配单个字符的基本写法,单个字符包含(数字、字母(大小写)、特殊的字符(空白 , 、 : \n))

类型

表示

备注

数字

\d[0-9]

 

非数字

\D![0-9]

此处的!是自己的猜测,应该会有关系运算符号在里面--目前没有看到有该用法

小写字母

[a-z]

 

非小写字母

![a-z]

 

大小字母

[A-Z]

 

非大小字母

![A-Z]

 

特殊字符

不知道

 

非特殊字符

不知道

 

还有一些相应的组合情况:如字符

/w[a-zA-Z0-9]

此处的组合应该有很多种,相信以上的基本表示都可以满足

 

5、python正则表达式语法2(字符匹配的重复次数)

以面主要讲解匹配单个字符,本次主要讲解如何表达匹配字符的次数,因为有些场景的规则下不固定字符的个数,比如说用户名(比如:只要求是6个字符以上就行了)并且正常的模式下都是贪婪型的匹配(也就是尽可能多的去匹配字符)。

 

表达式

含义

备注

*

匹配前一个字符>=0

 

+

匹配前一个字符>=1

 

?

匹配前一个字符0-1

 

{m} / {m, n}

{m}:匹配前一个字符m次;

{m, n}:匹配前一个字符m-n次;

 

*?(非贪婪型匹配)

*匹配次数的基础上尽量少的去匹配;

 

+?(非贪婪型匹配)

+匹配次数的基础上尽量少的去匹配;

 

注意:组合使用的时候,通过?表示非贪婪模式,及表示在?前面一个字符表示的匹配次数据的基础上尽量少的次数的去匹配。

 

 

 

6、python正则表达式语法3(边界和分组)

(1) 边界

有时候需要固定字符串匹配以什么开头,或者以什么结尾,所以有边界,其实也就正则表达式规定匹配的位置。

表达式

含义

备注

^

字符串以什么开头

不是仅仅指第一个字符,其含义就是匹配的结果为这个字符串开头

$

字符串以什么结尾

同上

\A / \Z

开头 / 结尾

同上

说明:位置只有开头和结尾两个,默认只要字符串匹配上就行,有可能在中间位置。

 

 

 

(2) 分组

在正则表达式匹配的过程中,可能有些部分的规则是一样的,在写正则表达式的时间没有必要再把这一部分规则再写一次。所以正则表达式引入了分组的概念。

表达式

含义

备注

|

表示或

a|b:表示在该位置匹配a字符或者b字符

(ab)

括号内的内容表示一个分组

 

\<number>

可以分组的索引号引用该分组

如:\1

(?P<name>)

表示给该分组取的别名

 

(?P=name)

表示引用该分组的内容

\<number>类似

 

 

 

理论:看核心基础理论,系统化学习

 

实践:在系统学习的基础上进一步实践

 

 

原创粉丝点击