2012-03-31 102 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