2011-02-24 30 views
0

我有标签序列,我只需要删除具有以下结构的那些标签:如正则表达式:如何从我的标签列表中删除机器标签

*:*:* 

它们是机器标签:Flickr的:事件:132394,而不是用户提交的标签。我应该使用什么正则表达式?

fields[i] = fields[i].replaceAll(" ,.*:.*", ""); 

感谢

+0

的可能的复制http://stackoverflow.com/questions/5103251/regular-expressions-all-words-after-my - 现在已经不存在了 – adarshr 2011-02-24 10:23:55

+0

为什么你的正则表达式中有一个逗号?它是格式的一部分吗? – reef 2011-02-24 10:28:26

+0

你可以尝试字段[i] .replaceAll(“。*:”,“”)也许。 – reef 2011-02-24 10:29:15

回答

1

fields[i] = fields[i].replaceAll("\\w+:\\w+:\\w+", "");

如果单词只包含字母和数字。 为了更安全,你甚至可以说:

fields[i] = fields[i].replaceAll("[^:]+:[^:]+:[^:]+", "");

,将删除不冒号的所有字符。 唯一的问题是最后一节。你怎么知道最后一个字是完成的?那里没有冒号。例如,如果你想删除不空白中的所有字符,说:

fields[i] = fields[i].replaceAll("[^:]+:[^:]+:\\S+", "");

+0

你的第二个版本也符合这个:“一些:标记一些:othertag一些:thirdtag”。 '[^:] +'是贪婪的方式! – 2011-02-24 10:32:25

0

这应做到:

fields[i] = fields[i].replaceAll("\\w+:\\w+:\\w+", ""); 

(具体说明见my answer to your other question

或者,如果您还需要处理用逗号(也许是空白) ,使用此版本:

fields[i] = fields[i].replaceAll("\\s*,?\\s*\\w+:\\w+:\\w+", "");