正则表达式备忘

真正开始学习正则表达式是从linux开始的,那时候看了皓哥的sed入门和awk的入门文章,里面涉及到了很多正则表达式的东西。

如果说sed、awl、grep、find要玩的好一定得把正则表达式玩的好。以下是我的一些总结,主要是针对自己的一些误解的解决。

1.区分ERE和BRE

      在写正则表达式的时候一定要区分到底用的是基本的正则表达式还是扩展的正则表达式。扩展的正则表达式支持|,但是不支持分组。

      在linux里面,sed、grep用的是基本正则表达式,grep -E、awk用的是扩展正则表达式。

2.区分正则表达式和原始字符串

      我一开始把python的原始字符串和正则表达式的关系弄混了,导致了一些误解。

   2.1.实际上原始的字符串,比如r'\n'打印出来不是换行,而是\n。

         也就是说转义字符在原始字符串中失效,这个在linux里面和单引号是一样的。

   2.2.原始字符串在正则表达式中可能会有特殊含义.

          比如*,.*等等,还有比如\b,这些东西只有在正则表达式中才会成立,离开了正则表达式就是普通的字符。

3.其他关于python RE的

         match是从字符串行首开始匹配,而research是从字符串行首开始查找,故search可以匹配串中的位置。
         字符串匹配后会把匹配的结果放入返回的对象的group属性中,如果正则表达式中含有分组,则可以通过group(id)来访问
         对于有分组的情况,所有分组还会放在属性groups()中,他是一个元组,可以通过下标访问。
         对于含有锚点的正则表达式,只适用于research,因为match肯定会从行首匹配。
         如果想找到所有的匹配咋搞?用findall,它返回匹配的列表。注意如果这时候正则表达式含有子组,则会返回子组的列表。
         正则表达式进行替换则包括sub和subn,唯一区别是subn会返回元组,包括替换完成后的字符串和替换次数。
         注意别把正则表达式中的特殊字符和ASCII特殊字符搞混了。

 

你可能感兴趣的:(正则表达式)