python-进阶教程-使用正则表达式拆分多重分隔符字符串

0.摘要

字符串自带的.split()方法只能应对单一分隔符的情况,本文介绍正则表达式的方法可以满足对多重分隔符分离要求,并且能够处理更为复杂的字符串。

1.re.split()

split(pattern, string, maxsplit=0, flags=0):该函数会按照pattern的形式对string进行分割,pattern通常以正则表达式编写,用于说明分隔符的匹配样式。

import re

line = 'asdf fjdk; afed, fjek,asdf,      foo'
# (a) Splitting on space, comma, and semicolon
parts = re.split(r'[;,\s]\s*', line)
print(parts)
#result:['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

本例子的string包含了空格、制表符、逗号、分号等多种分隔符。

正则表达式中:

[]:表示字符集合,匹配所包含的任意一个字符。

\s:表示匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

*:表示匹配前面的子表达式零次或多次。

r'[;,\s]\s*':表示分隔符为:分号、逗号和空白字符三者之一+[0,+∞)个空白字符。

需要注意的是:

如果pattern的正则表达式中有包含在括号中的捕获组,那么匹配的文本也会出现在最终的返回值中:

# (b) Splitting with a capture group
fields = re.split(r'(;|,|\s)\s*', line)
print(fields)
#result:['asdf', ' ', 'fjdk', ';', 'afed', ',', 'fjek', ',', 'asdf', ',', 'foo']

从上例中可以看出,空格、逗号等字符也出现在了返回值中。

如果想要避免分割字符出现在返回列表中,可以使用(?……)形式,破坏捕获组结构即可。

parts = re.split(r'(?:,|;|\s)\s*', line)
print(parts)

猜你喜欢

转载自blog.csdn.net/qq_17753903/article/details/85727529