這有什麼好做分裂和標點符號;你只關心字母(和數字),只想一個正則表達式:
import re
def getWords(text):
return re.compile('\w+').findall(text)
演示:
>>> re.compile('\w+').findall('Hello world, my name is...James the 2nd!')
['Hello', 'world', 'my', 'name', 'is', 'James', 'the', '2nd']
如果您不關心數字,與[A-Za-z]
取代\w
只是字母,或[A-Za-z']
以包括收縮等。有可能更奇妙的方式包括字母非數字字符類(例如帶有重音的字母)與其他正則表達式。
我幾乎回答了這個問題在這裏:Split Strings with Multiple Delimiters?
但你的問題實際上是在指定的:你想'this is: an example'
拆分成:
['this', 'is', 'an', 'example']
- 或
['this', 'is', 'an', '', 'example']
?
我認爲這是第一例。
[本, '是', '一',例如']是我想要的。有沒有導入正則表達式的方法?如果我們可以用''替換非ascii_letters,然後將字符串拆分成列表中的單詞,那麼這樣做會起作用嗎? - 詹姆斯史密斯2分鐘前
的正則表達式是最優雅的,但是,是的,你可以象下面這樣:
def getWords(text):
"""
Returns a list of words, where a word is defined as a
maximally connected substring of uppercase or lowercase
alphabetic letters, as defined by "a".isalpha()
>>> get_words('Hello world, my name is... Élise!') # works in python3
['Hello', 'world', 'my', 'name', 'is', 'Élise']
"""
return ''.join((c if c.isalnum() else ' ') for c in text).split()
或.isalpha()
旁註:你也可以請執行以下操作,但它需要導入另一個標準庫:
from itertools import *
# groupby is generally always overkill and makes for unreadable code
# ... but is fun
def getWords(text):
return [
''.join(chars)
for isWord,chars in
groupby(' My name, is test!', lambda c:c.isalnum())
if isWord
]
如果這是家庭作業,他們可能正在尋找一個命令式的東西,例如狀態爲「是字母的最後一個字符」,如果狀態從字母變爲 - >非然後你輸出一個單詞。不要那樣做;這不是一個好的編程方式(儘管有時抽象是有用的)。
我爲您格式化了您的問題。下次請使用'code'按鈕('{}')。 – Johnsyweb