2009-10-31 73 views
4

我想寫一個正則表達式匹配特定字符串中的所有單詞,但跳過括號內的單詞。我現在有一個匹配所有單詞一個正則表達式:尋找匹配所有單詞的正則表達式,[括號內]

/[a-z0-9]+(-[a-z0-9]+)*/i 

我也有一個匹配括號內的所有單詞的正則表達式:

/\[(.*)\]/i 

我基本上要匹配所有第一正則表達式匹配,但沒有第二個正則表達式匹配的所有東西。

示例輸入文本:http://gist.github.com/222857 它應該分別匹配每個單詞,沒有括號中的單詞。

任何幫助表示讚賞。謝謝!

+0

那麼'來自[威尼斯] [1]的優秀的年輕女士,''成爲'美麗的小姐','? – 2009-10-31 00:45:04

回答

3

也許你可以做的兩個步驟:

  1. 括號內刪除所有文本。
  2. 使用正則表達式來匹配其餘單詞。

使用單個正則表達式試圖做這兩件事情最終會變得比它需要更復雜。

+0

是的,這也正是我要做的。 – 2009-10-31 00:45:44

0

我不認爲我正確理解這個問題。爲什麼不只是使不包含第二個正則表達式,像這樣一個新的字符串:

string1 =~ s/\[(.*)\]//g 

了我的頭頂部不會那場比賽你刪除了哪些內容,同時將結果存儲在STRING1?儘管如此,我還沒有測試過。我可能會在稍後測試它。

0

我同意Shhnap。沒有更多的信息,這聽起來像最簡單的方法是刪除你不想要的東西。但它需要是/[(.*?)]/。之後,你可以拆分\。

如果你試圖遍歷每個單詞,並且你想要每個單詞匹配,也許你可以作弊一點點:string.split(/ \ W + /)。你會失去引號和什麼不是,但你得到每一個字。

1

怎麼回合此:

your_text.scan(/\[.*\]|([a-z0-9]+(?:-[a-z0-9]+)*)/i) - [[nil]] 
+0

嘿,格倫,你是說,然後看看第1組?這是一種很酷的簡單技術,出於某種原因,很少有人似乎正在使用這種技術。 +1! :)我只是在[regex賞金任務](http://stackoverflow.com/q/23589174)上使用它,並在研究是否有人使用該技術時找到了答案。 – zx81 2014-05-13 21:35:06

1

哪個版本的Ruby您使用的是?如果是1.9或更高版本,這應該做你想做的:

/(?<![\[a-z0-9-])[a-z0-9]+(-[a-z0-9]+)*(?![\]a-z0-9-])/i 
0

這似乎工作:

[^\[][a-z0-9]+(-[a-z0-9]+)* 

如果一個單詞的第一個字母是一個開放的支架,它不匹配。

順便說一句,有沒有一個原因,你爲什麼捕捉他們的破折號的話?如果沒有必要,你的正則表達式可以被簡化。

相關問題