首页 > 请问怎么用正则表达式分割用&隔开的内容?

请问怎么用正则表达式分割用&隔开的内容?

在做url内容提取时,我碰到这个问题,要提取出:

hello&bye&你好&再见&123

中的hello bye 你好 再见 123。
我一开始想用正则表达式做,写成这样:

a = re.compile(r'^((\S+)&)*(\S+)$')

我的本意是想先匹配0个或者多个blabla&,然后最后匹配一个blabla,但是结果却是这样:

>>> a.search('再见').groups()
(None, None, '再见')
>>> a.search('你好&再见&hello&').groups()
('你好&再见&hello&', '你好&再见&hello', 'hello2')

后来我才想起来python提供的字符split('&')可以搞定,但我还是想知道怎么用正则表达式解决这个问题?


你需要的不是在表达式内部匹配多组,而是整个表达式匹配多次。

也就是说正则表达式用([^&]*)(?:&|$),方法用re.findall()re.finditer()

细节上看你的目的再考虑。如果出现了&&这样的,用*就会把空字符串匹配出来,如果用+则不匹配。举个例子,做URL匹配的时候就倾向于用+,这表示多个/连起来和一个/同义。但做有些允许空项的输入解析时,就不能丢弃空字符串。

【热门文章】
【热门文章】