您的位置:首页 > 编程语言 > Python开发

python 学习笔记(5)用户自定义类正则表达式

2013-05-08 11:10 721 查看
 

声明:本文系本人学习python3总结,如有侵权等,请及时告知;

                       欢迎转载:请保留http://blog.csdn.net/kevinx_xu/article/details/8899263

 

 

一、用户自定义类

         1.定义一个类

                   >>>class c_name:                    

                   ...     def __init__ (self, arg1,arg2):

                   ...             self.val1 = arg1

                   ...             self.val2 = arg2

                   ...     def fun1(self):

                   ...             return self.val1

                   ...     def fun2(self):

                   ...             return self.val2

                   ...

                   >>>c1 = c_name(100,200)

                   >>>c2 = c_name(1,2)

                   >>>c1.fun1()

                   100

                   >>>c2.fun2()

         2如上,定义一个类,这个类使用时需要传递两个参数,__init__相当与C++中的构造函数,self相当与c++的this指针;

         定义一个类后,使用是直接新建一个对象,类似C++中的调用new去调用构造函数,构造完成后,就有了这个类的属性,fun1, fun2

二、正则表达式

         所有的现代编程语言都有内建字符串处理函数。

         在python里查找,替换字符串的方法是:index()、 find()、split()、 count()、 replace()等。但这些方法都只是最简单的字符串处理。比如:用index()方法查找单个子字符串,而且查找总是区分大小写的。为了使用不区分大小写的查找,可以使用s.lower()或者s.upper(),但要确认你查找的字符串的大小写是匹配的。replace() 和split() 方法有相同的限制。

         正则表达式有强大并且标准化的方法来处理字符串查找、替换以及用复杂模式来解析文本。正则表达式的语法比我们的程序代码更紧凑,格式更严格,比用组合调用字符串处理函数的方法更具有可读性。甚至你可以在正则表达式中嵌入注释信息。

         1.导入正则表达式

                   importre

                  

                           
^ 匹配字符串开始. 

                           
$ 匹配字符串结尾  

                           ? 表示匹配是可选的  

                           \b 在\b右边必须有一个分隔符

                           \d 匹配所有0‐9的数字.

                            \D 匹配除了数字外的所有字符.

                           
+的意思是一个或多个。

                           字符串的前面添加一个字符‘r’,在处理正则表达式的时候总是使

用原始字符串。

                   注意,如果要使用松散正则表达式,需要传递一个叫re.VERBOSE的参数

 

         1)为了在正则表达式中表达这个独立的词,你可以使用‘\b’。它的意思是“在\b右边必须有一个分隔符”。在python中,比较复杂的是‘\’字符必须被转义,这有的时候会导致‘\’字符传染(想想可能还要对\字符做转义的情况)。

         2)  为了解决‘\’字符传染的问题,可以使用原始字符串。这只需要在字符串的前面添加一个字符‘r’。它告诉python,字符串中没有任何字符需要转义。‘\t’是一个制表符,但r‘\t’只是一个字符‘\’紧跟着一个字符t。我建议在处理正则表达式的时候总是使

用原始字符串。否则,会因为理解正则表达式而消耗大量时间.

2、罗马数字的规则

         在罗马数字中,有七个不同的数字可以以不同的方式结合起来

表示其他数字。  

         •  I = 1  

         •  V = 5  

         •  X = 10  

         •  L = 50  

         •  C = 100  

         •  D = 500  

         •  M = 1000 

 

•  大部分时候用字符相叠加来表示数字。I是1, II是2, III是3。VI是6(挨个看来,是“5 和 1”的组合),VII是7,VIII是8。  

•  含有10的字符(I,X,C和M)最多可以重复出现三个。为了表示4,必须用同一位数的下一个更大的数字5来减去一。不能用IIII
来表示4,而应该是IV(意思是比5小1)。40写做XL(比50小10),41写做
XLI,42写做XLII,43写做 XLIII,44写做XLIV(比50小10
并且比5小 1)。  

3、查找

         re.search(pattern, string, flags=0)

         ?表示可选的参数

         pattern模式,eg:a?a?a?

         string要查找的字符串

         (A|B|C)的意思是“只匹配A,B或者C中的一个”。

4、松散正则表达式

                  flags =  re.VERBOSE将flags
标志为松散正则表达式

         松散正字表达式和普通紧凑的正则表达式有两点不同:  

•  空白符被忽略。空格、制表符和回车在正则表达式中并不会匹配空格、制表符、回车。如果你想在正则表达式中匹配他们,可以在前面加一个\来转义。  

•  注释信息被忽略。松散正字表达式中的注释和python代码中的一样,都是以#开头直到行尾。它可以在多行正则表达式中增加注释信息,这就避免了在python代码中的多行注释。他们的工作方式是一样的。

•  正则表达式中的空白符,他们都会被忽略掉了。还有一些注释信息,当然也被正则表达式忽略掉。

 

注意,如果要使用松散正则表达式,需要传递一个叫re.VERBOSE的参数

 

5、数字匹配

         \d 匹配所有0‐9的数字. \D 匹配除了数字外的所有字符.

\d{3}表示什么意思?\d表示任意的数字(0
到9),{3}表示一定要匹配3个数字。


 

re.compile(pattern, flags=0)

   Compile a regular expression pattern, returning a pattern object.

pattern 正则表达式的式子

         eg:

                   >>>test_pattern = re.compile('^(\d{3})-(\d{3})-(\d{4})$')

                   >>>test_pattern.search('123-456-7777').groups()          

                   ('123','456', '7777')

                   >>>

         注意:(\d)将匹配到的字符分成一个元组;

        

6、字符匹配

         \D匹配除了数字以外的任意字符,+的意思是一个或多个。

         >>>test_pattern = re.compile('^(\d+)\D+(\d+)\D+(\d+)$')

         >>>test_pattern.search('123 234 23141').groups()

         ('123','234', '23141')

         >>>test_pattern.search('12113 2234 233141').groups()

         ('12113','2234', '233141')

         >>>test_pattern.search('12113 ===  2234 ===233141').groups()

         ('12113','2234', '233141')

         >>>

         *的意思是0到多个

         >>>test_pattern = re.compile(r'^\D*(\d{3})\D*(\d{3})\D*(\d{4})$')

         >>>test_pattern.search('12113 ===  2234 ===233141').groups()   

         Traceback(most recent call last):

           File "<stdin>", line 1, in<module>

         AttributeError:'NoneType' object has no attribute 'groups'

         >>>test_pattern.search('121 222 2331').groups()      

         ('121','222', '2331')

         >>>test_pattern.search('xxx121 222 2331').groups()

         ('121','222', '2331')

         >>>test_pattern.search('xxx121ghkhk 222 2331').groups()

         ('121','222', '2331')

         如果使用松散的正则表达式

                   需要在re.compile("pattern", re.VERBOSE)

 

 

        

总结

                  • ^ 匹配字符串开始位置。  

• $ 匹配字符串结束位置。  

• \b 匹配一个单词边界。  

• \d 匹配一个数字。  

• \D 匹配一个任意的非数字字符。  

• x? 匹配可选的x字符。换句话说,就是0个或者1个x字

符。  

• x* 匹配0个或更多的x。  

• x+ 匹配1个或者更多x。  

• x{n,m} 匹配n到m个x,至少n个,不能超过m个。  

• (a|b|c) 匹配单独的任意一个a或者
b或者c。  

• (x) 这是一个组,它会记忆它匹配到的字符串。你可以用

re.search返回的匹配对象的groups()函数来获取到匹配的值。  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: