python-正则表达式

正则表达式

1.定义:正则表达式是你创建的用来过滤文本的模式。一个程序或者脚本使用你定义的模式来匹配数据,就像数据流过这个程序一样。如果数据匹配这个模式,则它接受处理。如果数据不匹配这个模式,则它拒绝。

正则表达式是通过使用正则表达式引擎实现的。一个正则表达式引擎实际上是一个软件,它解释正则表达式模式,并使用这个模式匹配文本。

 

2.python中使用正则表达式需引用re模块,re模块提供的正则表达式常用的函数:

match 从字符串开头查找模式

search 从字符串的任意位置查找模式

findall 查找所有匹配模式的子串并返回一个列表

finditer 查找所有匹配模式的子串并返回一个迭代器

上述的函数接收两个参数,第一个参数是正则表达式模式,第二个参数是应用这个模式的字符串。

2.1编译正则表达式,如果你在代码中经常使用相同的正则表达式,你可以将这个表达式编译并存储在一变量中,然后你可以在代码的任何想进行正则表达式模式匹配的地方使用这个变量,使用compile()函数编译表达式:

Pattern = re.compile(‘[ch]at’)

Pattern.search(‘this is a cat’)

2.2 特殊字符

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

 

(1) ^字符定义了数据流中一行文本的开始的位置的模式,如果该模式出现在开头的位置以外的其他地方,那么这个正则表达式模式失败。功能和match()相同。

re.search^’books’,’the books store’) 匹配失败

re.search^’books’,’books are great’)= re.match(‘books’,’books are great’) 匹配成功

(2) $符号查找一行的末尾的模式,你可以在文本模式中,加入这个特殊字符来表示这个模式必须匹配到这行数据的结尾。

re.search(‘book$’,’this is a good book’)

(3) 组合锚(‘^textstring$’)

1)某一行只包含特定的文本模式的数据:re.search(‘^i love lixiangyue$’,’i love lixiangyue’)

2)过滤文本中空字符:re.search(‘^#’,’love’) 匹配失败

                                   re.search(‘’^#,’’)    匹配成功

(4) .字符用来匹配除了换行符外的任意单个字符,点子符必须是某个字符,如果在点的位置没有字符,则模式失败。

re.search(‘.at’,’that is heavy’) 匹配成功

re.search(‘.at’,’at home’)     匹配失败

(5) []字符分类定义一类字符在文本模式中匹配一个位置,如果字符类中的一个字符出现在数据流中,则模式匹配。[]中包含任何你想要包括在这个类中的字符。

[ch] 正则表达式匹配c或者h   re.search(‘[ch]at’,’that is a very nice hat’)

[Yy][Ee][Ss] 一个表达式中使用多个字符类 re.search(‘’[Yy][Ee][Ss],’Yes’) 这个正则表达式用于同时覆盖三个位置的大小写字符。

(6) ^字符串取反 在正则表达式模式中,你可以反转一个字符类的结果,可以查找任何不包含在类中的字符。

re.search(‘[^ch]at’,’the cat is sleeping’) 匹配失败

re.search(‘[^ch]at’,’he is at home’)     匹配成功

(7) -连接符,使用连接符在字符类中指定一个字符的范围,需要指定范围的第一个字符、连接符,然后是范围的最后一个字符,正则表达式会把所有在这个范围中的字符包含进来。

[0-9]包含09中的所有字符

[a-z] [A-Z]包含azAZ中字符

[a-ch-m]包含achm中的字符

(8) *在一字符后面放一个星号表示这个字符可以在文本中出现0次或多次

re.search(‘ie*k’,’ik’)

re.search(‘ie*k’,’iek’)

re.search(‘ie*k’,’ieek’)

用于处理单词的错误拼写或者在语言中的多种拼写方法。例如在处理美式英语和英式英语单词colour/color

re.search(‘colou*r’,’i bought a new color TV’)

(9) ?表明前面的字符可以出现零次或者一次,这是它的全部,它不匹配重复出现的字符串

re.search(‘be?t’,’bt’)

re.search(‘be?t’,’bet’) 这两种模式匹配成功

re.search(‘be?t’,’beet’) 匹配失败

(10) +表明在它前面的字符可以出现一次或多次,但是必须至少出现一次

re.search(‘be+t’,’bet’)

re.search(‘be+t’,’beet’) 这两种模式匹配成功

re.search(‘be+t’,’bt’)   匹配失败

(11) {}可以指定在正则表达式中重复的限制次数,通常也被称为一个间隔

{m} 正则表达式确定出现m

{m,n} 正则表达式确定出现至少m最多不超过n

re.search(‘be{1,2}t’,’bet’)

re.search(‘be{1,2}t’,’beet’) 这两种模式匹配成功

re.search(‘be{1,2}t’,’bt’)   匹配失败

(12) |管道符号 允许你指定两个或者多个模式,正则表达式引擎使用逻辑的公式来检查数据流,若任何一个模式匹配文本,则文本通过,若没有模式匹配,则数据流文本失败。

re.search(‘cat|dog’,’the cat is sleeping’)

re.search(‘cat|dog’,’the dog is sleeping’)  这两种模式匹配成功

re.search(‘cat|dog’,’the horse is sleeping’) 匹配失败

(13 )()分组表达式 使用()可以对正则表达式分组,分组后,这个组被当成一个标准字符对待,你可以像对常规字符一样对这个组使用特殊字符。

re.search(‘sat(urday)?’,’sat’)

re.search(‘sat(urday)?’,’saturday’) 这两种模式匹配成功

re.search(‘(c|b)a(b|t)’,’cab’)

模式(c|b)(b|t)匹配任何以第一个分组的字母和第二个分组中的字母的组合。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李天琦

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值