Python:正则表达式-6

转载,原文来自FishC(小甲鱼)。

修改字符串

正则表达式使用以下方法修改字符串:

Split()        在正则表达式匹配的地方分割,并返回一个列表

Sub()        找到所有匹配的子字符串,并退换新的内容

Subn()      跟Sub()一样,但返回新的字符串及退换的数目

1).split(string[,maxsplit=0])

通过正则表达式匹配来分割字符串;如果在RE中,使用了捕获组,则内容会作为一个列表返回;可以通过传入一个maxsplit参数来设置分割的数量;如果maxsplit值是非0,表示至多有maxsplit个分割会被处理,剩下的内容作为列表的最后一个元素返回。

模块级别的函数re.split()除了将RE作为第一个参数外,其它参数是一样的。

2)搜素和退换

另一个常见的任务就是找到所有的匹配部分,并退换成不同的字符串;sub方法有一个replacement参数,它可以是一个待退换的字符串,或者一个处理字符串的函数。

.sub(replacement,string[,count=0])

返回一个字符串,这个字符串从最左边开始,所有RE匹配的地方都替换成replacement;如果没有找到任何匹配,那么返回原字符。

可选参数count指定最多退换的次数,需一个非负值;默认值为0,意思是退换所有找到的匹配。

subn()方法跟sub()方法相同。但区别是返回值为一个包含有两个元素的元祖:一个是退换后的字符串,一个是退换的数目。

空匹配只有在它们没有紧挨着前一个匹配时才会被退换掉。

如果replacement参数是一个字符串,那么里边的反斜杠都会被处理,如\n将会被换成一个换行符,\r转换成回车,等。未知的转义如\j保持原样;逆向引用如\6,则会被RE中相应的捕获组匹配的内容锁退换,使我们可以在退换后的字符串中插入一部分原字符。

还可以使用Python的扩展语法(?P<name>)指定命名组,引用命名组的语法是\g<name>;\g<name>会将名字为name的组匹配的字符串替换进去。另外,\g<数字>是通过组的序号进行引用;\g<2>其实就相当于\2,但我们更提倡\g<2>,因为这样可以避免歧义。

replacement参数还可以是一个函数,该函数将会在正则表达式模式每次不重复匹配的时候被调用。在每次调用时,函数会收到一个匹配对象的参数,可以利用这个对象去计算出新的字符串并返回它。

当使用模块级别的re.sub()函数时,正则表达式模式作为第一个参数;该模式可以是一个字符串或一个编译好的对象。





  



猜你喜欢

转载自blog.csdn.net/huan_126/article/details/80296956