如何使用正则表达式排除特定字符模式

时间:2012-03-31 13:50:29

标签: ruby regex

我正在使用一些正则表达式匹配,我试图弄清楚如何排除特定的字符模式。具体来说,我想排除以下模式:

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

请注意Blue-Stork Stables和Juan Carlos-Martin的破折号。

1 个答案:

答案 0 :(得分:4)

编辑:所以你的意思是“删除”,而不是“排除”。没问题:

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

将您的输入转换为所需的输出。我冒昧地允许多个数字(毕竟,如果数字达到10或更高,你可能也想完全删除它们。对吧?)。


(“历史原因”的旧答案)

根据“排除”的含义,您似乎正在寻找负前瞻断言:

^(?!.*\d - )

将在任何地方包含5 -的字符串失败并在所有其他字符串上成功:

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