如何用正则表达式排除特定字符模式
问题描述:
我正在使用一些正则表达式匹配,并试图弄清楚如何排除特定字符模式。具体来说,我要排除以下模式:如何用正则表达式排除特定字符模式
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
请采取蓝鹳马厩和胡安·卡洛斯·马丁的破折号的音符。
答
编辑:所以你的意思是 “删除”,而不是 “排除”。没问题:
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
what * exactly * d你的意思是“排除”?应该只有确切的模式阻止匹配,或者如果可以在字符串的开头或字符串中的任何位置找到该模式?请提供一些您希望/不希望匹配的字符串示例。 – 2012-03-31 14:11:04
“[^ 5^- ]”没有办法像你打算的那样工作。匹配一个*单个字符*,即**不是**'5','','^'或'-'。 – Kobi 2012-03-31 14:14:06
我的意思是它将匹配除了我排除的所有内容。例如,我将在制表符分隔的文件上使用此排除[^ \ t] +,因为它会匹配所有数据并排除制表符。 – Mutuelinvestor 2012-03-31 14:15:40