将所有内容拼接在[]内的是什么样的正则表达式?

时间:2012-07-04 14:53:40

标签: java regex

我的文字用语言标签注释如下:

PRE[per]    ART[la] NOUN[creazione] PRE[di] ART[un] NOUN[prodotto]  ADJ[innovativo]     ARTPRE[nel] NOUN[mercato]   ARTPRE[delle]   NOUN[comunicazioni] PRE[senza]  NOUN[fili] PUN[(]   NPR[WiFi]   PUN[)]  

什么正则表达式会给我回复方括号内的文本,间隔为一个匹配?那就是:

per la creazione di un prodotto innovativo nel mercato delle comunicazioni senza fili (WiFi)

3 个答案:

答案 0 :(得分:2)

你需要一个正则表达式和一个连接所有匹配的循环。

由于您已应用Java标记,因此Java代码为:

    String text = ...;
    Matcher matcher = Pattern.compile("\\[(.*?)\\]").matcher(text);
    StringBuilder result = new StringBuilder();
    while (matcher.find()) {
        result.append(matcher.group(1));
        result.append(' ');
    }
    System.out.println(result);

答案 1 :(得分:2)

这将通过匹配[]内的任何内容来工作,尽管()也将是间隔的:

str.replaceAll(".*?\\[(.*?)\\]", "$1 "));

答案 2 :(得分:0)

String text = "PRE[per]    ART[la] NOUN[creazione] PRE[di] ART[un] NOUN[prodotto]  ADJ[innovativo]     ARTPRE[nel] NOUN[mercato]   ARTPRE[delle]   NOUN[comunicazioni] PRE[senza]  NOUN[fili] PUN[(]   NPR[WiFi]   PUN[)] ";
Pattern pattern = Pattern.compile("(\\[(\\w+)\\])");
Matcher matcher = pattern.matcher(text);

StringBuilder sb = new StringBuilder();
while(matcher.find()) {
    sb.append(matcher.group(2)).append(" ");
}
System.out.println(sb);