第二章:字符串和文本¶
01 使用多个界定符分割字符串¶
问题
将一个字符串分割为多个字段,但是分隔符(还有周围的空格)并不是固定的。
re.split()
解决方案
string
对象的 split()
方法只适应于非常简单的字符串分割情形, 它并不允许有多个分隔符或者是分隔符周围不确定的空格。 当需要更加灵活的切割字符串的时候,最好使用 re.split()
方法
讨论
Attention
当你使用 re.split()
函数时候,需要特别注意的是正则表达式中是否包含一个括号捕获分组。如果使用了捕获分组,那么被匹配的文本也将出现在结果列表中。
>>> fields = re.split(r'(;|,|\s)\s*', line)
>>> fields
['asdf', ' ', 'fjdk', ';', 'afed', ',', 'fjek', ',', 'asdf', ',', 'foo']
>>>
如果想保留分割字符串,用来在后面重新构造一个新的输出字符串,可以如下操作:
>>> values = fields[::2]
>>> delimiters = fields[1::2] + ['']
>>> values
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
>>> delimiters
[' ', ';', ',', ',', ',', '']
>>> # Reform the line using the same delimiters
>>> ''.join(v+d for v,d in zip(values, delimiters))
'asdf fjdk;afed,fjek,asdf,foo'
>>>
如果不想保留分割字符串到结果列表中去,但仍然需要使用到括号来分组正则表达式的话, 确保你的分组是非捕获分组,形如 (?:...)
。比如:
02 字符串开头或结尾匹配¶
问题
03 用Shell通配符匹配字符串¶
问题
04 字符串匹配和搜索¶
问题
05 字符串搜索和替换¶
问题
06 字符串忽略大小写的搜索替换¶
问题
07 最短匹配模式¶
问题
08 多行匹配模式¶
问题
09 将Unicode文本标准化¶
问题
10 在正则式中使用Unicode¶
问题
11 删除字符串中不需要的字符¶
问题
12 审查清理文本字符串¶
问题
13 字符串对齐¶
问题
14 合并拼接字符串¶
问题
15 字符串中插入变量¶
问题
16 以指定列宽格式化字符串¶
问题
17 在字符串中处理html和xml¶
问题
18 字符串令牌解析¶
问题
19 实现一个简单的递归下降分析器¶
问题
20 字节字符串上的字符串操作¶
问题
总结¶
总结