2013-05-08 125 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]']

相關問題