4-19 Linux中的正则表达式 --- 字符匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4-19 Linux中的正则表达式 --- 字符匹配相关的知识,希望对你有一定的参考价值。

参考技术A 1、正则表达式和通配符有点像。区别在于通配符匹配的是文件名和目录名中的字符串,不能匹配文本中内容的字符串。而正则表达式匹配的是文本中的字符串。

2、正则表达式(REGEXP):由一类特殊字符及文本符号所编写的表达式,这种表达式的功能是匹配文本当中字符串。

3、正则表达式的特点:可以通过特殊字符及文本符号灵活组合各种过滤条件去匹配文本内容,从而达到自由度颇高的筛查方式。

4、正则表达式分两类:基本正则表达式(BRE)、扩展正则表达式(ERE),grep 加上 -E 参数就是使用 egrep。

5、元字符分类:元字符是指正则表达式中使用的特殊字符,这些特殊符号具有特定的功能。从功能上分类有:字符匹配、匹配次数、位置锚定、分组。

①、 .:匹配任意单个字符。

②、 [ ]:匹配指定范围内的任意单个字符。

③、 [^]:排除匹配指定范围内的任意单个字符。

④、 [:alnum:]:过滤字母和数字,包含了大写字母、小写字母 和 10个数字(0-9)。

⑤、 [:alpha:]:任何英文大小写字符,即 A-Z,a-z。

⑥、 [:lower:]:只过滤小写字母。

⑦、 [:upper:]:只过滤大写字母。

⑧、 [:blank:]:空白字符(空格和制表符)。

⑨、 [:space:]:水平和垂直的空白字符(比 [:blank:] 包含的范围广)。

⑩-①、 [:digit:]:十进制数字。

⑩-③、 [:graph:]:可打印的非空白字符。

⑩-④、 [:print:]:可打印字符。相当于 [:alnum:]、[:punct:] 和 space。

⑩-⑤、 [:punct:]:标点符号。

正则-简单的模式

我们将从最简单的正则表达式开始,由于正则表达式常用于操作字符串的,因此我们从最常见的任务下手:字符匹配

字符匹配

大多数字母和字符会匹配它们自身。

举个例子:正则表达式FishC将完全匹配字符串‘FishC’。

(你可以启用不区分大小写模式,则正则表达式FishC可以匹配‘FISHC’,或‘fishc’)

当然这个规则也有例外。

有少数特殊的字符我们称之为‘元字符’(metacharacter),它们并不能匹配自身,它们定义了字符类,子组匹配和模式重复次数等。

本文用很大的篇幅讨论了各种元字符及其作用。

下面是元字符的完整列表

. ^ $* + ? {} \\ | ()

注释:如果没有这些元字符,正则表达式就会变得跟字符串的find()方法一样平庸了。

1、方括号

我们先来看一下方括号[],它们指定一个字符类用于存放你需要匹配的字符集合。

可以单独列出需要匹配的字符,也可以通过两个字符和一个横杆指定匹配的范围。

例如:[abc]会匹配字符a,或b,或c;[a-c]可以实现相同功能。后者使用范围来表示与前者相同的字符集合。

如果你想只匹配小写字母,你的RE可以写成[a-z]。

 

需要注意的一点是:元字符在括号中不会触发‘特殊功能’,在字符类中,它们只匹配本身。

例如:[akm$]会匹配\'a\',\'k\',\'m\',或\'$\',$是一个元字符,但是在方括号中它不代表特殊含义,它只匹配$字符本身。

2 、^

你还可以匹配方括号中位列出的其他所有字符。做法是在类的开头添加一个脱字字符^,

例如:[^5]会匹配除了‘5’之外的任何字符。

3、反斜杠

或许最终要的元字符当属反斜杠了‘\\’,跟python的字符串规则一样,如果在反斜杠后面紧跟着一个元字符,那么元字符的‘特殊功能’也不会触发。

例如:你需要匹配[ 或 \\ , 你可以在前加反斜杠以消除他们的特殊功能: \\[ , \\\\。

反斜杠后面跟一些字符还可以表示特殊的意义,例如表示十进制的数字,表示所有的字母或者表示所有的非空白的字符集合。

注释:反斜杠很牛逼,后面加元字符则去除其特殊功能,后面加普通字符则实现特殊功能。

例如:\\w 匹配任何单词字符。

如果正则表达式以字节的形式表示,这相当于[a-zA-Z0-9]

如果正则表达式表示的是一个字符串,\\w 会匹配所有的unicode数据库

你可以在编译正则表达式的时候,通过提供re.ASCII表示进一步限制 \\w 的定义。

注释:re.ASCII标志使得\\w 只能匹配ASCII字符,不要忘了python是unicode的。

它们可以包含在一个字符类中,并且一样拥有特殊含义。

例如:[\\s,.]是一个字符类,它将匹配任何空白字符,\',\'或\'.\'

4、\' . \'

最后我们讲的一个元字符是 \'.\' ,它匹配除了换行符以外的任何字符。

如果设置了re.DOTALL标志,.将匹配包括换行符在内的任何字符。

以上是关于4-19 Linux中的正则表达式 --- 字符匹配的主要内容,如果未能解决你的问题,请参考以下文章

python中的正则表达式

正则表达式的基础问题

[转]python中的正则表达式(re模块)

re.sub

正则表达式

浅谈正则表达式匹配模式—贪婪模式