2012-03-31 135 views
0

我正在使用一些正則表達式匹配,並試圖弄清楚如何排除特定字符模式。具體來說,我要排除以下模式:如何用正則表達式排除特定字符模式

5 -  #in words: digit, space, dash & space) 

我知道如何逐一排除的組件:[^5 ^-]但我希望排除的特定模式。這可能嗎?

更新 - 我使用Ruby作爲我的編程語言。

下面是一些示例輸入和期望的輸出:

Input: 1 - Blue-Stork Stables; 2 - Young, Robert, S.; 3 - Seahorse Stable; 4 - Carney, Elvis; 5 - Guerrero, Juan, Carlos-Martin; 6 - Dubb, Michael; 7 - Summers, Hope; 8 - DTH Stables; 9 - Peebles, Matthew\n 

所需的輸出將是:

Output: Blue-Stork Stables; Young, Robert, S.; Seahorse Stable; Carney, Elvis; Guerrero, Juan, Carlos-Marting; Dubb, Michael; Summers, Hope; DTH Stables; Peebles, Matthew\n 

請採取藍鸛馬廄和胡安·卡洛斯·馬丁的破折號的音符。

+0

what * exactly * d你的意思是「排除」?應該只有確切的模式阻止匹配,或者如果可以在字符串的開頭或字符串中的任何位置找到該模式?請提供一些您希望/不希望匹配的字符串示例。 – 2012-03-31 14:11:04

+2

「[^ 5^- ]」沒有辦法像你打算的那樣工作。匹配一個*單個字符*,即**不是**'5','','^'或'-'。 – Kobi 2012-03-31 14:14:06

+0

我的意思是它將匹配除了我排除的所有內容。例如,我將在製表符分隔的文件上使用此排除[^ \ t] +,因爲它會匹配所有數據並排除製表符。 – Mutuelinvestor 2012-03-31 14:15:40

回答

4

編輯:所以你的意思是 「刪除」,而不是 「排除」。沒問題:

result = subject.gsub(/\d+ - /, '') 

將您的輸入轉換爲所需的輸出。我冒昧地允許一個以上的數字(畢竟,如果數字達到10或更高,你可能也想完全刪除它們,對吧?)。


(老答案「歷史原因」)

根據你所說的「排除」是什麼,看來你正在尋找排除模式斷言:

^(?!.*\d -) 

會在任何地方包含5 -並且在所有其他字符串上成功的字符串上失敗:

"5 - "  // fail 
"5 -"  // match 
"abc5 - xyz" // fail 
"foobar5 - " // fail 
+0

我會用'^(?!\ d + \ s * - \ s *)。*'去,但是很多信息在這裏不見了...... – Kobi 2012-03-31 14:18:08