2013-05-08 69 views
3

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

我怎样写一个有关正则表达式的代码?或者,有没有什么方法来整理单词?

回答

5
>>> 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+'

+0

结尾''\ b''不需要贪婪匹配程序它。另外,我猜测OP也希望匹配大写字母S。 – 2013-05-08 12:19:36

+0

@StevenRumbalski好点,我想OP可能已经想要大写'S',但不确定,因为OP使用'[s]',但是我也将其添加进去 – jamylak 2013-05-08 12:20:50

+0

谢谢大家的帮助! – PrimingRyan 2013-05-08 12:49:50

1
  1. 如果你想匹配单个字符,你不需要把它放在一个字符类,所以s比同[s]

  2. 你想要找的是一个word boundary。单词边界\b是与从非单词字符(\W)到单词字符(\w)(反之亦然)的更改相匹配的锚点。

解决的办法是:

\bs\w+ 

这个表达式将匹配上一个s与不发一语字符之前(的作品也对字符串的开始)之后,至少还需要一个字字符。 \w+匹配它可以找到的所有单词字符,因此最后不需要\b

看到它here on Regexr

+0

谢谢你的详细答案。并加入网站将有好的信息 – PrimingRyan 2013-05-08 12:51:29

3

我知道这是不是正则表达式的解决方案,但你可以使用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'] 
>>> 
+0

这是有用的方式!谢谢! – PrimingRyan 2013-05-08 14:35:48

+0

@PrimingRyan不客气 – 2013-05-08 14:39:48

-1

我想在这里补充一个小东西,

比方说,你有一个找到以's'开头的单词

line =“someone should show something to [email protected]

如果写正则表达式等, 剑= re.findall(R “\ B [SS] \ W +”,线)

输出将是, [ '某人', '应该',”秀”, '东西', '有些']

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

使用\ S代替\ W

剑= re.findall(R“\ b [SS ] \ S +“,行)

输出将是, ['someone','should','show','something','[email protected]']

相关问题