2013-09-24 32 views
0

我有一句話,我希望從中提取所有單詞。我將一個詞定義爲[a-zA-Z],但是一個詞也可能包含一個撇號。撇號本身不是一個詞。我正在用Python3進行編程。正則表達式將句子分成簡單的英文單詞

輸入文本:

Don't-thread 0 '' ' 'on \r\nme! 

應該給:

Don't 
thread 
on 
me 

關於正則表達式的分裂。然後我將轉換使用python如下:

Don't -> dont 
thread -> thread 
on -> on 
me -> me 

更多輸入:

''Kay', he said. 'What're you goin' to do?' 

正則表達式分裂和Python的翻譯應該給:

''Kay' -> kay 
    he -> he 
    said -> said 
    'What're -> whatre 
    you -> you 
    goin' -> going 
    to -> to 
    do -> do 

這是我目前使用:

\b(\S+)\b 

這顯然符合比我感興趣的

UPDATE多了不少:

詞可以用單引號開始。比如「Get'em!」

+1

聽起來更像分裂雖然...你有沒有嘗試過任何至今爲止的事情?你正在使用什麼語言/正則表達式引擎? – Jerry

+0

什麼旅行你喜歡? – Almo

+0

我們在這裏不是爲你做整個工作(即使它很簡單)。請告訴我你的方法 –

回答

1

你可以試試這個正則表達式:

[A-Za-z]+(?:'[A-Za-z]+)* 

原本應該在大多數正則表達式引擎的工作。其中一些組可以根據正則表達式引擎的具體情況縮短,但這是一個更普遍的正則表達式。

確保撇號被字母包圍。

編輯:要允許初始撇號,你可以簡單地在開始添加'?

'?[A-Za-z]+(?:'[A-Za-z]+)* 

regex101 demo

+1

請注意,這不會接受以撇號開頭的單詞。這可能是也可能不是希望OP想要的。 –

+0

@JohnKugelman Yup,這是故意的正則表達式。海事組織可能會用單引號錯誤撇號。 – Jerry

+0

@Jerry但是單詞可以以撇號開頭。舉例來說,「讓他們!」! – Baz

2

顯然你的一個詞的定義是錯誤的,那麼。我可能會定義一個字作爲

'?\p{L}+|p{L}+[p{L}']* 

然後。

隨機注意:不要使用\b,除非你確定你想要它的語義(很少見),或者在你的情況下並不重要。 \b\w緊密聯繫,對語言處理同樣無用,因爲它包含數字和下劃線。

+0

'[\ p {L}'] * \ p {L} [\ p {L}'] *'會更好的海事組織。必須有一個字母,並且左右可以有撇號或其他字母。 –

+0

@Јοеу定義如下:一個單詞可以以字母或撇號開頭,但如果它以撇號開頭,那麼至少在一個字母后面需要緊跟一個單詞。 – Baz

0

更新版本:

使用John Kugelman建議正則表達式和位加上轉義字符這可能適合你

#(?<!\\)[\p{L}']*\p{L}[\p{L}']*#


第一個版本:

這一件作品至少在PHP中:

#(?<!\\)(?:[IaA]|[A-Za-z]{2,})(?:'[A-Za-z]+)*#

http://xrg.es/#iwgvz6

該位:(?<!\\)是ommit轉義字符

相關問題