我有一个程序,它编写一个正则表达式,以匹配最后一个字母结尾的所有单词' 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))
答案 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']