匹配所有以s结尾的单词

时间:2015-04-16 21:14:25

标签: python regex python-3.x

我有一个程序,它编写一个正则表达式,以匹配最后一个字母结尾的所有单词' s' 。然而,我遇到的问题是,它只匹配第一个单词,然后停止。所以,如果我输入表达式: "詹姆斯和我们一起很棒"

我希望

 matchObj.group() : 'james'
 matchObj.group(1): 'is'
 matchObj.group(2): 'us'

但我只得到matchObj.group() : 'james'

我认为问题可以追溯到匹配功能的工作方式,是否有解决方法?这是我的代码

import re



matchObj = re.match(r'\w+s', expression, re.M|re.I)

print("matchObj.group() : ", matchObj.group())
print("matchObj.group(1) : ", matchObj.group(1))
print("matchObj.group(2) : ", matchObj.group(2))

3 个答案:

答案 0 :(得分:5)

您需要像这样使用re.findall来匹配字符串中包含的所有对象:

words = re.findall(r'\b\w+s\b', your_string)

答案 1 :(得分:2)

你可以使用列表理解:

sentence = "james is great with us"
new = [word for word in sentence.split() if word[-1] == "s"]

答案 2 :(得分:0)

我更喜欢@ A.J.的列表理解比这个解决方案更好,但对于那些喜欢函数式编程的人来说:

sentence = 'james is great with us'
print filter(lambda s: s.endswith('s'), sentence.split())
#OUT: ['james', 'is', 'us']