比如有这么一个字符串。"xiaohong loves xiaoming,xiaozhu loves xiaoli,xiaopeng loves xiaozhao"。我希望用Python正则表达式提取出loves两边的人名来。
我这样写的。names = re.search(r'(\S+) loves (\S+)',str, )
while names:
print names.group(1)
print names.group(2)
但是一直打印xiaohong,xiaoming.
希望知道正确的用法。看了几篇文档,好像没提及。
应当使用 find_all()
search的功能就是: 从左到右,去计算是否匹配,如果有匹配,就返回。 即只要找到匹配,就返回了。 所以,最多只会匹配一个, 而不会匹配多个。
findall可以全部匹配。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
str = 'xiaohong loves xiaoming,xiaozhu loves xiaoli,xiaopeng loves xiaozhao'
names = re.findall(r'(\S+) loves (\S+)(,|$)',str, re.I)
print names
if names:
for group in names:
print group[0], group[1]