2014-04-16 80 views
2

再次聲明,我完全陷入創建一個正則表達式。提取從串詞之外的所有單詞在方括號

我有這樣一個字符串模式:

str = ' wordA [] wordAB [xyz] wordABC [x] '

所以總是有一個字,接着在括號[ ... ]或空方括號[]東西。單詞的長度,括號內的開頭和結尾空格以及字符數是隨機的。隨機的是這個序列重複的頻率。

我想只提取的話不帶括號:

output = 

    'wordA' 'wordBC' 'wordABC' 

我認爲這個問題的方括號,因爲它們對正則表達式功能字符。我試過類似

output = regexp(str,'^\[.+\]$','split') 

和變化沒有成功。

任何提示?

+0

只有'\ [。+?\]'就行了。 –

+0

@SabujHassan不,它不起作用,它沒有得到最後的單詞,它們仍然包含空格。 - >''wordA''wordABC'''' – thewaywewalk

+0

嗯...沒有看到你有一個空的'[]'輸入。 '\ s * \ [*。*] \ s *':-) –

回答

2

我們可以使用正則表達式\w+選擇所有單詞。但它會選擇所有單詞(包括括號中的那些單詞)。括號外的話有空格前後他們,因此我們可以添加正回顧後(?<=\s) - 確保有這個詞之前的空間,積極前瞻(?=\s) - 確保一詞後還有空間。另外之前第一個單詞沒有空間,所以我們需要包括條件包括開始串的爲好,給我們積極的回顧後(?<=\s|^)。最後,我們有充分的正則表達式:

(?<=\s|^)\w+(?=\s) 

Regular expression visualization

在,如果你能有wordA[]字符串(無空格)的情況下,那麼你需要添加[積極前瞻。

(?<=\s|^)\w+(?=\s|\[) 

Regular expression visualization

在,如果你能有wordA [ xyz ]字符串(括號內位)的情況下,上述正則表達式是行不通的,我們需要不同的策略 - 發現之前沒有[話。但是我們不能僅僅說[10]字詞沒有[在它們之前,因爲它將匹配yz[xyz],我們需要說我們需要不是由[引用的字詞和]以外的符號。

(?<!\[[^]]*)\w+ 

Regular expression visualization

+0

謝謝!最後的情況不會發生。 – thewaywewalk

+0

@thewaywewalk很高興爲您提供幫助。請檢查第三個案例,以確保它不會發生在你身上。 –

+0

我預計它可能會失敗,像'word_2'這樣的詞,但即使這些詞也是正確匹配的。所以不應該有任何問題 – thewaywewalk

相關問題