正则表达式

正则表达式


正则表达式简述

正则表表达式,又称规则表达式

正则表达式是特殊的字符序列,利用事先定义好的特定字符以及他们的组合组成了一个规则,然后检查一个字符串是否与这种规则匹配来实现对字符的过滤或匹配。正则表达式是字符串处理的有力工具,但是并不是Python独有的,其他语言也有。在Python中,re模块提供了正则表达式操作所需要的功能

正则表达式的分类

正则表达式:REGEXP,REGular EXPression。
正则表达式分为两类:

  • Basic REGEXP(基本正则表达式)
  • Extended REGEXP(扩展正则表达式)

基本正则表达式

元字符

.				//任意单个字符

[root@master a]# ls
1  2  3  4  5  6  7  8  9  a  z  Z
[root@master a]# ls |grep '.'
1
2
3
4
5
6
7
8
9
a
z
Z

[]				//匹配指定范围内的任意单个字符
[root@master a]# ls
1  2  3  4  5  6  7  8  9  a  z  Z
[root@master a]# ls |grep '[1-9]'   
1
2
3
4
5
6
7
8
9

[^]				//匹配指定范围外的任意单个字符
[root@master a]# ls
1  2  3  4  5  6  7  8  9  a  z  Z
[root@master a]# ls |grep '[^1-9]'
a
z
Z

匹配次数(贪婪模式)

*				//匹配其前面的任意单个字符任意次
[root@master b]# ls
a  aa  aaa  aab  abb  abbb  baa  bba
[root@master b]# ls |grep '^ab*$'  //表示一个字符串有一个a后面跟着零个或若干个b
a
abb
abbb

.*				//任意长度的任意字符
[root@master b]# ls
a  aa  aaa  aab  abb  abbb  baa  bba
[root@master b]# ls |grep '.*'
a
aa
aaa
aab
abb
abbb
baa
bba

\?				//匹配其前面的任意单个字符1次或0次
[root@master b]# ls
a  aa  aaa  aab  ab  abb  bbb
[root@master b]# ls |grep '^ab\?$'  //表示一个字符串有一个a后面跟着零个或者一个b
a
ab

 \+				//匹配其前面的任意单个字符至少1次
[root@master b]# ls
a  aa  aaa  aab  ab  abb  bbb
[root@master b]# ls |grep '^ab\+$'  //表示一个字符串有一个a后面跟着至少一个b或者更多
ab
abb

\{m,n\}         //匹配其前面的任意单个字符至少m次,至多n次
[root@master b]# ls
a  aa  aaa  aab  ab  abb  bbb
[root@master b]# ls |grep '^ab\{2\}$'  //表示一个字符串有一个a跟着2个b
abb

[root@master b]# ls
a  aa  aaa  aab  ab  abb  abbb  abbbb  abbbbbb  bbb
[root@master b]# ls |grep '^ab\{2,\}$'  //表示一个字符串有一个a跟着至少2个b
abb
abbb
abbbb
abbbbbb
[root@master b]# ls |grep '^ab\{3,5\}$'  //表示一个字符串有一个a跟着3到5个b
abbb
abbbb

//位置锚定

^           //锚定行首,此字符后面的任意单个字符必须出现在行首
$           //锚定行尾,此字符前面的任意单个字符必须出现在行尾
[root@master b]# ls
a  aa  aaa  aab  ab  abb  abbb  abbbb  abbbbbb  abc  bbb
[root@master b]# ls |grep '^b'   
bbb
[root@master b]# ls |grep 'c$'
abc

^$          //空白行
[root@master ~]# cat c
hello world

hehe
[root@master ~]# grep ^$ c

[root@master ~]# grep -v ^$ c
hello world
hehe

\v或\b    //锚定词首,其后面的任意单个字符必须作为单词首部出现

[root@master ~]# cat hello 
hello aaa bbb ccc dddd

ad ad ad aadddjljlj
[root@master ~]# grep '\<h' hello 
hello aaa bbb ccc dddd
[root@master ~]# grep 'd\>' hello 
hello aaa bbb ccc dddd
ad ad ad aadddjljlj


[root@master ~]# cat hello 
hello aa hello bb hello cc

/分组
    \(\)
    例:\(ab\)*
    //后向引用
        \1      //引用第一个左括号以及与之对应的右括号所包括的所有内容
        \2      //引用第二个左括号以及与之对应的右括号所包括的所有内容
hello runtime world
[root@master ~]# sed 's/hello \(.*\) \(.*\)/hello \2 \1/' hello 
hello cc aa hello bb hello

hello world runtime

扩展正则表达式

字符匹配

.				//任意单个字符

[root@master a]# ls
1  2  3  4  5  6  7  8  9  a  z  Z
[root@master a]# ls |egrep '.'
1
2
3
4
5
6
7
8
9
a
z
Z

[]				//匹配指定范围内的任意单个字符
[root@master a]# ls
1  2  3  4  5  6  7  8  9  a  z  Z
[root@master a]# ls |egrep '[1-9]'   
1
2
3
4
5
6
7
8
9

[^]				//匹配指定范围外的任意单个字符
[root@master a]# ls
1  2  3  4  5  6  7  8  9  a  z  Z
[root@master a]# ls |grep '[^1-9]'
a
z
Z

匹配次数(贪婪模式)

*				//匹配其前面的任意单个字符任意次
[root@master b]# ls
a  aa  aaa  aab  abb  abbb  baa  bba
[root@master b]# ls |egrep '^ab*$'  //表示一个字符串有一个a后面跟着零个或若干个b
a
abb
abbb

.*				//任意长度的任意字符
[root@master b]# ls
a  aa  aaa  aab  abb  abbb  baa  bba
[root@master b]# ls |egrep '.*'
a
aa
aaa
aab
abb
abbb
baa
bba

\?				//匹配其前面的任意单个字符1次或0次
[root@master b]# ls
a  aa  aaa  aab  ab  abb  bbb
[root@master b]# ls |egrep '^ab\?$'  //表示一个字符串有一个a后面跟着零个或者一个b
a
ab

 \+				//匹配其前面的任意单个字符至少1次
[root@master b]# ls
a  aa  aaa  aab  ab  abb  bbb
[root@master b]# ls |egrep '^ab\+$'  //表示一个字符串有一个a后面跟着至少一个b或者更多
ab
abb

\{m,n\}         //匹配其前面的任意单个字符至少m次,至多n次
[root@master b]# ls
a  aa  aaa  aab  ab  abb  bbb
[root@master b]# ls |egrep '^ab\{2\}$'  //表示一个字符串有一个a跟着2个b
abb

[root@master b]# ls
a  aa  aaa  aab  ab  abb  abbb  abbbb  abbbbbb  bbb
[root@master b]# ls |egrep '^ab\{2,\}$'  //表示一个字符串有一个a跟着至少2个b
abb
abbb
abbbb
abbbbbb
[root@master b]# ls |egrep '^ab\{3,5\}$'  //表示一个字符串有一个a跟着3到5个b
abbb
abbbb

//位置锚定

^           //锚定行首,此字符后面的任意单个字符必须出现在行首
$           //锚定行尾,此字符前面的任意单个字符必须出现在行尾
[root@master b]# ls
a  aa  aaa  aab  ab  abb  abbb  abbbb  abbbbbb  abc  bbb
[root@master b]# ls |egrep '^b'   
bbb
[root@master b]# ls |egrep 'c$'
abc

^$          //空白行
[root@master ~]# cat c
hello world

hehe
[root@master ~]# egrep ^$ c

[root@master ~]# egrep -v ^$ c
hello world
hehe

\v或\b    //锚定词首,其后面的任意单个字符必须作为单词首部出现

[root@master ~]# cat hello 
hello aaa bbb ccc dddd

ad ad ad aadddjljlj
[root@master ~]# egrep '\<h' hello 
hello aaa bbb ccc dddd
[root@master ~]# egrep 'd\>' hello 
hello aaa bbb ccc dddd
ad ad ad aadddjljlj


[root@master ~]# cat hello 
hello aa hello bb hello cc

//分组
    ()      //分组
    \1\2\3....
   例:(ab)*
    //后向引用
        \1      //引用第一个左括号以及与之对应的右括号所包括的所有内容
        \2      //引用第二个左括号以及与之对应的右括号所包括的所有内容
[root@master ~]# cat hello
hello aa hello bb hello cc

hello runtime world
[root@master ~]# sed -r 's/(hello) (.*) (.*)/\3 \1 \2/' hello 
cc hello aa hello bb hello

world hello runtime
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值