2017-01-27 52 views
1

我想根據python中的分隔符將文本劃分爲句子。但是,我不想根據數字之間的小數點或數字之間的逗號來分割它們。我們如何忽略它們。根據模式劃分句子

例如,我有一個如下所示的文本。

I am xyz.I have 44.44$. I would like, to give 44,44 cents to my friend. 

的判決必須是

I am xyz 
I have 44.44$ 
I would like 
to give 44,44 cents to my friend 

能否請你幫我的正則表達式。如果這個問題以前已經被問過,我很抱歉。我找不到。

謝謝

+0

類似的問題已經回答在這裏:http://stackoverflow.com/questions/4998629/python-split-string-with-multiple-delimiters – tirupats

+0

你試過什麼正則表達式?這個正則表達式發現的句子是什麼? –

+0

import nltk; sent_detector = nltk.data.load('tokenizers/punkt/english.pickle'); sent_detector.tokenize(s) –

回答

4

這適用於你的榜樣,雖然在最後的部分是一個尾隨句號(期),如果該事項。

import re 

s = 'I am xyz. I have 44.44$. I would like, to give 44,44 cents to my friend.' 

for part in re.split('[.,]\s+', s): 
    print(part) 

輸出

I am xyz 
I have 44.44$ 
I would like 
to give 44,44 cents to my friend. 

Wiktor的的表情\s*[.,](?!\d)\s會爲你的新工作,例如:

I am xyz.I have 44.44$. I would like, to give 44,44 cents to my friend. 

打破下來:

  • \s*將0與許多空白字符匹配。
  • [.,]將匹配,.字符。
  • (?!\d)將導致匹配被丟棄,如果在這一點上數字匹配。這是避免數字分裂的必要條件。
  • \s將匹配單個空白字符。

請注意,它仍然會失敗,比如「我是22.10年前我是12.」,儘管我不認爲有任何方法可以解決使用正則表達式的問題。

+0

對不起,我沒有給出正確的例子。你給出的正則表達式不適用於我是xyz.I有44.44 $。我想,給我的朋友44,44美分。 – hulk

+0

非常感謝您的解決方案! – hulk