2013-07-21 48 views
0

我想將句子拆分爲單詞和特殊字符。我使用正則表達式如下:獲取包括連字符在內的各種令牌的正則表達式

@"((\b[^\s]+\b)((?<=\.\w).)?) 

但它只返回的話,而不是特殊字符,例如空格分隔的連字符或冒號。

理想的情況下,對於句子: 「眼下」

她大聲喊道,雙手在空氣中飄動 - 在幾聲歡呼聲中 - 大約兩分鐘時間裏 。

我應該得到:

 
Right 
now 
she 
shouted 
and 
hands 
fluttered 
in 
the 
air 
- 
amid 
a 
few 
cheers 
- 
for 
about 
two 
minutes 
+0

'!'在哪裏? –

+0

不僅僅是單個的令牌,也不是直接與單詞相關的字符。 – aceBox

回答

1

聽起來this regex會做你要找的內容:

@"\b\s?([A-Za-z-]+)\s?\b" 

好像你一直在努力,雖然正則表達式有點太簡單了!還有更多嗎?

+0

這是一場比賽! Casimir的分裂正則表達式似乎可以解決這個問題(雖然我沒有測試過),但我會在開始時插入一個插入符號,以免得到第一個引號'(?:\ s + | ^)(?:\ p {P} )(\ S?!)?| \ b \ p {p} + \ S *'。 – Jerry

+0

其實,@「\ b \ s?[A-Za-z-] + \ s?\ b」也會在一些單詞之後呈現空格(在上例中,除'now','喊'之外, '空氣','乾杯'和'分鐘')。如何避免這種情況? – aceBox

+0

它也不會給我冒號和其他空間分隔的charachters。 – aceBox

0

用這樣的模式或許分裂:

@"\s+(?:\p{P}(?!\s))?|\b\p{P}+\s*" 
0

以防萬一你想在非正則表達式的方式從句子刪除標點,仍然保持了連字符:

import string 
s = '"Right now!" she shouted, and hands fluttered in the air - amid a few cheers - for about two minutes.' 
x = "".join([c for c in s if c =="-" or c not in string.punctuation]) 

輸出:

'Right now she shouted and hands fluttered in the air - amid a few cheers - for about two minutes' 

只需使用x.split()得到它切分給你所需的輸出。

相關問題