我想替换除@ [anyword]
之外的所有字符串我有这样的字符串:
yng nnti dkasih tau :)"@mazayalinda: Yg klo ada cenel busana muslim aku mau ikutan dong "@noviwahyu10: Model ! Pasti gk blh klo k
且@mazayalinda
和@noviwahyu10
与我的正则表达式@\w*
匹配。
但是,除了上面的2个单词之外,我需要删除所有字符串。我们需要做出否定,但我混淆了组合2个正则表达式,它们是匹配@[anyword]
的正则表达式和除掉那2个单词之外的所有句子。
有什么想法吗?
答案 0 :(得分:2)
从上下文来看,如果这是一个可行的解决方案并不完全清楚,但是当你想要替换除某个模式之外的所有内容时,听起来更像是你想要一个正则表达式搜索而不是替换。例如,在python中它可能看起来像:
>>> import re
>>> s = 'yng nnti dkasih tau :)"@mazayalinda: Yg klo ada cenel busana muslim aku mau ikutan dong "@noviwahyu10: Model ! Pasti gk blh klo k'
>>> re.findall(r'@\w+', s)
['@mazayalinda', '@noviwahyu10']
编辑:在js中,这样的事情会更合适:
var s = 'yng nnti dkasih tau :)"@mazayalinda: Yg klo ada cenel busana muslim aku mau ikutan dong "@noviwahyu10: Model ! Pasti gk blh klo k';
// code from http://www.activestate.com/blog/2008/04/javascript-refindall-workalike
var rx = new RegExp("@\\w+", "g");
var matches = new Array();
while((match = rx.exec(s)) !== null){
matches.push(match);
}
在此之后,matches
包含所有匹配的字符串。如果需要,您可以将它连接在一起作为单个字符串。
答案 1 :(得分:0)
在我看来,你想要使用捕获组,而不是完全否定字符串的其余部分,像一个正则表达式:
[^@]*(@\w+)[^@]*
将在捕获组中捕获这些条目,然后根据您的语言,您可以访问每个捕获的字符串:http://rubular.com/r/qHKb35OK3g
答案 2 :(得分:0)
使用此正则表达式(?<=^|@\w+\b)[^@]+
和联合匹配
答案 3 :(得分:0)
好吧,我不完全确定我理解这个问题,但是如果你只想保留名字并使用其余的只是“摆脱它”,为什么不简单地保存名称而忽略休息?
如果你热衷于匹配“非名称模式” - 这似乎是某种对话的摘录,其中每条消息都以':'开头。如果是这样,那么使用它应该只是诀窍。
:[^ @] *
答案 4 :(得分:-1)
您可以使用零宽度否定断言,即@(?!mazayalinda|noviwahyu10)\w
。
这需要一些复杂的正则表达式引擎,如Perl,Ruby,Java等。 如果您有经典引擎,那么@pcalcao sais的方式最好。