Find all strings except one string using regex
我想匹配所有字符串,除了字符串EDOCX1,0。例子:
1 2 3 4 5 6
| "A" --> Match
"F" --> Match
"AABC" --> Match
"ABCC" --> Match
"CBA" --> Match
"ABC" --> No match |
我试过使用[^ABC],但它忽略了"CBA"和其他。
- BCA行吗?出租车呢?
- 我相信这已经在stackoverflow.com/questions/406230/hellip;上进行了详细讨论。
- @袋熊,另一个问题是拒绝包含某个子字符串的字符串。这是关于完全由ABC组成的字符串的特殊情况。AABC和ABCC都可以。
匹配除EDCOX1以外的所有字符串(0)。
- 我想他想要"A"、"B"、"C"的所有组合,对吧?(即在任何3长度的字符串中)
- @d'alar'cop CBA应根据示例进行匹配。
- 但是他不应该工作吗?如果不是,怎么会?
- @d'alar'cop [^ABC]将拒绝CBA。
- 啊,好吧,我想我只是误解了你的雷吉克斯。?!负向前看,对吗?下面的"$"是什么?(请原谅我的无知)
- @D'Alar'Cop:它与字符串的末尾匹配。否则,regex也会拒绝ABCD。
- 啊…我不知道。我没意识到有人会把锚定在里面。奈特。Vielen Dank。
- 我也试过用否定的,但从来没有用过,因为我没有用一个结束的位置在里面。谢谢提姆!
- 这就是我得到的:var some = /^(?!ABC$).*/; 'ABC asdfas asdfasdf'.match(some) result: ["ABC asdfas asdfasdf"]我认为这里不应该包括ABC
- @开发者:原始问题的作者显然有不同的想法(见例子4,问题下的评论和波西米亚的答案)。你似乎误解了这个问题。
从你的例子来看,我认为你的意思是"所有的字符串,除了那些包含abc这个词的字符串"。
试试这个:
- @波希米亚语:不,我的意思是"除了这个特定的字符串‘abc’之外的所有字符串"
用gnu grep反转匹配
您可以使用单词边界和要拒绝的特定字符串简单地反转匹配。例如:
1 2 3 4 5 6
| $ egrep --invert-match '\bABC\b' /tmp/corpus
"A" --> Match
"F" --> Match
"AABC" --> Match
"ABCC" --> Match
"CBA" --> Match |
这在您提供的语料库上非常有效。对于其他(或更复杂的)用例,您的里程可能会有所不同。
- 您的演示非常有效,但是在我的示例中没有类似"反转匹配"的内容。谢谢!