我想用python整理出句子中用's'开头的单词 这是我的代码:
import re
text = "I was searching my source to make a big desk yesterday."
m = re.findall(r'[s]\w+', text)
print m
但代码的结果是:
['searching', 'source', 'sk', 'sterday'].
如何编写有关正则表达式的代码?或者,有什么方法可以整理单词吗?
答案 0 :(得分:10)
>>> import re
>>> text = "I was searching my source to make a big desk yesterday."
>>> re.findall(r'\bs\w+', text)
['searching', 'source']
对于小写和大写s
,请使用:r'\b[sS]\w+'
答案 1 :(得分:5)
我知道它不是正则表达式解决方案,但您可以使用startswith
>>> text="I was searching my source to make a big desk yesterday."
>>> [ t for t in text.split() if t.startswith('s') ]
['searching', 'source']
>>>
答案 2 :(得分:1)
如果您想匹配单个字符,则无需将其放在字符类中,因此s
与[s]
相同。
您想要找到的是word boundary。单词边界\b
是一个锚点,它匹配从非单词字符(\W
)到单词字符(\w
)的变化,反之亦然。
解决方案是:
\bs\w+
此正则表达式将匹配s
之前没有单词字符(也适用于字符串的开头),并且后面至少需要一个单词字符。 \w+
匹配它可以找到的所有单词字符,因此最后不需要\b
。
答案 3 :(得分:0)
我尝试了这个代码示例,我认为它完全符合您的要求:
import re
text = "I was searching my source to make a big desk yesterday."
m = re.findall (r'\b[s]\w+', text)
print (m)
答案 4 :(得分:0)
Lambda样式:
text = 'I was searching my source to make a big desk yesterday.'
list(filter(lambda word: word[0]=='s', text.split()))
输出:
['searching', 'source']
答案 5 :(得分:-1)
我想在这里添加一件小事,
让我们说你有一条线来找到以'
开头的单词line ="有人应该向some@gmail.com"
展示一些东西如果你写正则表达式,如, 剑= re.findall(r" \ b [sS] \ w +",line)
输出将是, ['有人','应该''显示''东西''一些']
但是如果你将正则表达式修改为,
剑= re.findall(r" \ b [sS] \ S +",line)
输出将是, ['人''应该''秀''什么'' some@gmail.com']