在看书时,关于在限定模式下使用split()分隔字符串有这样一个例子:
import re DATA = ( 'Mountain wgag, CA 51676', 'wgag gage, CA', 'Gwegea, CA', 'VIOegga 81561', 'WAGA1, 1WAGA' ) for datum in DATA: print(re.split(',|(?= (?:\d{5}|[A-Z]{2})) ',datum))
运行结果是:
['Mountain wgag', '', 'CA', '51676']
['wgag gage', '', 'CA']
['Gwegea', '', 'CA']
['VIOegga', '81561']
['WAGA1', ' 1WAGA']
我想知道(?= (?:\d{5}|[A-Z]{2})的具体含义,为什么它不分割WAGA?
(?= (?:\d{5}|[A-Z]{2})
表示右侧是空格紧跟5个数字
或者空格紧跟2个大写字母
恩,刚刚又研究了一下,是这个意思,不过(?=空格(?:...)空格),为什么必须有第二个空格才可以呢?
@从MH到其他: 不知道你为什么那么写?我会这么写:',| (?=(?:\d{5}|[A-Z]{2}))'
@dudu: 谢谢哈,确实不能有空格。我之前没有理解到(?:),就分开写的,其实用(?:)分组更方便
@从MH到其他: (?:)
是非捕获分组,这里用不到它,可以去掉的
for datum in DATA:
print(re.split(',| (?=\d{5}|[A-Z]{2})',datum))
@dudu: 谢谢大神!我再去消化一下。以后有问题多多指点。