正则表达式入门之字符匹配

正则表达式入门-字符匹配

在前段时间进行文本挖掘练习的时候,不会使用正则表达式,深感不宜。所以这里,我想赶紧学习一下正则表达式。

注:本文是对《正则表达式必知必会》的复习。

1.正则表达式简介

正则表达式是一些用来匹配和处理文本的字符串,正则表达式语言用来构造正则表达式(最终构造出的字符串就成为正则表达式).

正则表达式语言并不是一种完备的程序设计语言,它甚至算不上是一种能够直接安装并运行的程序。

更准确地说,正则表达式语言是内置于其他语言或软件里的迷你语言。

2.匹配单个字符

2.1匹配纯文本

1

#文本
Hello, my name is Goat.
#正则表达式
Goat

#结果

Hello, my name is Goat.

Goat本身是纯文本,所以看起来不像是正则表达式,但它确实是。 

正则表达式可以包含纯文本,甚至可以只包含纯文本。


2.2匹配任意字符

在正则表达式中,特殊字符(或字符集合)用来给出要搜索的东西。字符.(英文句号)可以匹配任何一个单个的字符。

1

#文本
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
#正则表达式
sales.

#结果

sales1.csv

orders3.csv

sales2.csv

sales.csv

apac1.csv

na1.csv

na2.csv

sa1.csv

正则表达式sales.把字符串sales和另一个字符构成的文件名查找出来。8个文件里有3个与这个模式相匹配。

.字符可以匹配任何单个的字符、字母、数字、甚至是.字符本身。

在同一个正则表达式中,可以出现多个.字符,他们既可以连续出现,也可以间隔出现在模式的不同位置。

2

#文本
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
#正则表达式
.a..

#结果

sales1.csv

orders3.csv

sales2.csv

sales.csv

apac1.csv

na1.csv

na2.csv

sa1.csv

我们想要把以na或sa开头的文件找出来。正则表达式.a..将na1.csv、na2.csv、sa1.csv找出来,但他还找出了4个我们并不需要的匹配结果。

 

2.3匹配特殊字符

.字符在正则表达式中有特殊含义,如果我们需要一个.字符,而不是它在正则表达式中的特殊含义,

我们就需要在.前面加上\(反斜杠)字符,对他进行转义。\是一个元字符(表示这个字符有特殊含义,而不是字符本身含义).

1

#文本
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
#正则表达式
.a.\.csv

#结果

sales1.csv

orders3.csv

sales2.csv

sales.csv

apac1.csv

na1.csv

na2.csv

sa1.csv

可以看到,我们正确匹配了,我们想要的字符串。

在正则表达式中,\字符永远出现在一个有着特殊含义的字符序列开头,这个序列可以由一个或者多个字符构成。

如果需要搜索\本身,就必须对\进行转义,相应的转义序列是两个连续的反斜杠字符\\。

3.匹配一组字符

3.1匹配多个字符中的一个

与匹配任意单个字符的.字符不同,字符集合能匹配特定的字符和字符区间。

1(相比于上例减少了sales2.csv,增加了ca1.csv)

#文本
sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
#正则表达式
[ns]a.\.csv

#结果

sales1.csv

orders3.csv

sales.csv

apac1.csv

na1.csv

na2.csv

sa1.csv

ca1.csv

这里正则表达式以[ns]开头,表示这个集合将匹配字符n或s(但不匹配字符c或其他字符)。

在使用[和]定义的字符集合里,这两个元字符之间所有字符都是该集合的组成部分,

字符集合的匹配结果是能够与该集合里任意一个成员匹配的文本。

字符集合在不需要区分大小写的搜索操作里比较常见。

3.2利用字符集合区间

1(相比于上例增加了sam.csv)

#文本
sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
sam.csv
#正则表达式
[ns]a[0-9]\.csv

#结果

sales1.csv

orders3.csv

sales.csv

apac1.csv

na1.csv

na2.csv

sa1.csv

ca1.csv

sam.csv

为了避免匹配到sam.csv我们在正则表达式中,将.字符替换成[0-9],表示匹配0到9之间的任意一个数字。

在这里正则表达式提供了一个特殊的元字符,字符区间可以用-(连字符)来定义。

-(连字符)作为元字符,只能在[和]之间,在字符集合以外的地方,-只是一个普通的字符,只能和-本身匹配,因此在正则表达式中-不需要转义。

要避免让这个区间的尾字符小于首字符(例如[3-1]),这种区间没有意义。

字符区间并不仅限于数字,以下都是合法字符区间:

A-Z

匹配A到Z所有大写字母

a-z

匹配a到z所有小写字母

A-F

匹配A到F所有大写字母

A-z

匹配ASCII字符A到ASCII字符z的所有字母


3.3取非匹配

1

#文本
sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
sam.csv
#正则表达式
[ns]a[^0-9]\.csv

#结果

sales1.csv

orders3.csv

sales.csv

apac1.csv

na1.csv

na2.csv

sa1.csv

ca1.csv

sam.csv

这个例子中[0-9]变成了[^0-9],表示匹配的是任何不是数字的字符。元字符^来表示对一个字符集合进行取非匹配。

^的效果将作用于给定字符集合里的所有字符或字符区间,而不仅限于紧跟在^字符后的那一个字符或字符区间。






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoatGui

谢谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值