首页 新闻 会员 周边

关于正则非捕获元字符的问题

0
[已解决问题] 解决于 2018-08-06 22:06

在看书时,关于在限定模式下使用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?

从MH到其他的主页 从MH到其他 | 初学一级 | 园豆:140
提问于:2018-08-06 20:26
< >
分享
最佳答案
0

(?= (?:\d{5}|[A-Z]{2}) 表示右侧是空格紧跟5个数字或者空格紧跟2个大写字母

奖励园豆:5
dudu | 高人七级 |园豆:31007 | 2018-08-06 21:33

恩,刚刚又研究了一下,是这个意思,不过(?=空格(?:...)空格),为什么必须有第二个空格才可以呢?

从MH到其他 | 园豆:140 (初学一级) | 2018-08-06 21:37

@从MH到其他: 不知道你为什么那么写?我会这么写:',| (?=(?:\d{5}|[A-Z]{2}))'

dudu | 园豆:31007 (高人七级) | 2018-08-06 21:43

@dudu: 谢谢哈,确实不能有空格。我之前没有理解到(?:),就分开写的,其实用(?:)分组更方便

从MH到其他 | 园豆:140 (初学一级) | 2018-08-06 21:46

@从MH到其他: (?:)是非捕获分组,这里用不到它,可以去掉的

for datum in DATA:
    print(re.split(',| (?=\d{5}|[A-Z]{2})',datum))
dudu | 园豆:31007 (高人七级) | 2018-08-06 21:56

@dudu: 谢谢大神!我再去消化一下。以后有问题多多指点。

从MH到其他 | 园豆:140 (初学一级) | 2018-08-06 22:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册