如何查找以特定字符开头的单词

时间:2013-05-08 12:06:53

标签: python regex

我想用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'].

如何编写有关正则表达式的代码?或者,有什么方法可以整理单词吗?

6 个答案:

答案 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)

  1. 如果您想匹配单个字符,则无需将其放在字符类中,因此s[s]相同。

  2. 您想要找到的是word boundary。单词边界\b是一个锚点,它匹配从非单词字符(\W)到单词字符(\w)的变化,反之亦然。

  3. 解决方案是:

    \bs\w+
    

    此正则表达式将匹配s之前没有单词字符(也适用于字符串的开头),并且后面至少需要一个单词字符。 \w+匹配它可以找到的所有单词字符,因此最后不需要\b

    here on Regexr

答案 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)

输出将是, ['有人','应该''显示''东西''一些']

但是如果你将正则表达式修改为,

使用\ S而不是\ w

剑= re.findall(r" \ b [sS] \ S +",line)

输出将是, ['人''应该''秀''什么'' some@gmail.com']