1

我想替换除@[anyword] 之外的所有字符串

我有这样的字符串:

yng nnti dkasih tau :)"@mazayalinda: Yg klo ada cenel busana muslim aku mau ikutan dong "@noviwahyu10: Model ! Pasti gk blh klo k

并且@mazayalindaand@noviwahyu10匹配我的正则表达式@\w*

但是,我需要删除所有字符串,除了上面的两个单词。我们需要进行否定,但我对组合 2 个正则表达式感到困惑,它们是匹配 the 的正则表达式,@[anyword]以及除这两个词之外的所有句子。

有任何想法吗?

4

5 回答 5

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包含所有匹配的字符串。如果需要,您可以随时将其重新组合成一个字符串。

于 2013-04-29T14:14:46.797 回答
0

在我看来,您想使用捕获组,而不是完全否定字符串的其余部分,正则表达式如下:

[^@]*(@\w+)[^@]*

将在捕获组中捕获这些条目,然后,根据您的语言,您可以访问每个捕获的字符串:http ://rubular.com/r/qHKb35OK3g

于 2013-04-29T14:11:06.327 回答
0

使用这个正则表达式(?<=^|@\w+\b)[^@]+和联合匹配

于 2013-04-29T14:12:05.800 回答
0

好吧,我不完全确定我理解了这个问题,但是如果您只想保留名称并使用其余名称来“摆脱它”,那么您为什么不简单地保存名称并忽略其余名称呢?

如果您热衷于匹配“非姓名模式” - 这似乎是某种对话的摘录,其中每条消息都以“:”开头。如果是这样,那么使用它应该可以解决问题。

:[^@]*

于 2013-04-29T16:39:41.120 回答
-1

您可以使用零宽度否定断言,即@(?!mazayalinda|noviwahyu10)\w.

这需要一些复杂的正则表达式引擎,如 Perl、Ruby、Java 等。如果您有经典引擎,那么@pcalcao sais 的方式是最好的。

于 2013-04-29T14:21:51.800 回答