これは、分割や句読点とは何の関係もありません。あなただけの文字(および数字)を気に、とだけ正規表現をしたい:
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分前
regexpは最もエレガントであるが、次のようにはい、あなたがこれを可能性:
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
]
これは宿題であれば、2状態の有限状態マシンのような必須のものを探している可能性があります。状態は「最後の文字だった」とし、状態が文字 - >非-letterを入力すると単語が出力されます。それをしないでください。プログラムするのは良い方法ではありません(抽象化は便利ですが)。
私はあなたのためにあなたの質問をフォーマットしました。次回は 'code'ボタン( '{}')を使います。 – Johnsyweb