2012-11-14 626 views
1

我有一個字符串「一些詞,一些其他詞(括號中的單詞)」如何使用Ruby從字符串中刪除括號內的所有符號?

我怎樣才能完全刪除方括號中的括號,以得到「有些詞,一些其他詞」字符串作爲結果?

我對正則表達式新手,但我發誓要學會他們的作品)

感謝幫助!第一開括號\(前組的一切(.*),和參數1表示:

回答

2

試試這個:

# irb 
irb(main):001:0> x = "Some words, some other words (words in brackets)" 
=> "Some words, some other words (words in brackets)" 
irb(main):002:0> x.gsub(/\(.*?\)/, '') 
=> "Some words, some other words " 
+0

酷!很感謝! – Alve

+1

這個正則表達式有一個缺陷,因爲如果有多對括號,它會刪除大部分字符串。 –

+1

@Daandi可以通過使用Regex'/\(.*?\)/'來緩解這個問題,它會告訴它停止匹配它碰到第一個括號的瞬間。對於嵌套括號來說,它會變得更加複雜,但如果發生這種情況,最好開始逐字符分析。它可以用遞歸正則表達式來完成,但它很棘手。我回過頭問了一個關於它的問題:http://stackoverflow.com/q/9756884/303940 – KChaloux

0

String#[]

>> "Some words, some other words (words in brackets)"[/(.*)\(/, 1] 
    #=> "Some words, some other words " 

的正則表達式是指拍攝第一組。

如果您還需要匹配閉合括號,則可以使用/(.*)\(.*\)/,但如果字符串不包含括號中的一個,則將返回nil

/(.*)(\(.*\))?/還匹配不包含括號的字符串。

2

因爲「*」如果不是對括號一切之內將被刪除的greedyness的:

s = "Some words, some other words (words in brackets) some text and more (text in brackets)" 
=> "Some words, some other words (words in brackets) some text and more (text in brackets)" 

ruby-1.9.2-p290 :007 > s.gsub(/\(.*\)/, '') 
=> "Some words, some other words " 

一個更穩定的解決方案是:

/\(.*?\)/ 
ruby-1.9.2-p290 :008 > s.gsub(/\(.*?\)/, '') 
=> "Some words, some other words some text and more " 

離開方括號組之間的文本完好無損。

相關問題