Java正则表达式与标签分开

时间:2016-04-09 14:25:16

标签: java regex split

{{1}}

我想得到五个文字; (重要的一些标签未关闭

{{1}}

如何使用RegEx解决此问题?或者另一种方式?

2 个答案:

答案 0 :(得分:2)

此正则表达式(.*) (.*) .*#(\d+)#将起作用。

但是这里第一个和第二个字段不能包含任何空格。

您可以使用Pattern Matcher将此正则表达式与java一起使用。 以下是http://www.ocpsoft.org/opensource/guide-to-regular-expressions-in-java-part-1/的示例:

import java.util.regex.*;

public class ReplaceDemo {
    public static void main(String[] args) {
        String input = 
                  "User clientId=23421. Some more text clientId=33432. This clientNum=100";

        Pattern p = Pattern.compile("(clientId=)(\\d+)");
        Matcher m = p.matcher(input);

        StringBuffer result = new StringBuffer();
        while (m.find()) {
            System.out.println("Masking: " + m.group(2));
            m.appendReplacement(result, m.group(1) + "***masked***");
        }
        m.appendTail(result);
        System.out.println(result);
    }
}

答案 1 :(得分:0)

修改 您可以根据#令牌之间的标记进行拆分。这是一个示例代码:

public class RegexTest {
  public static void main(String []args) {
    // Input text
    String text1 = "Java programming #data#2016#/data#.";

    // Split based on # tokens
    String[] text1Split = text1.split("#[^#]*#");

    // Print result
    System.out.println(text1 + ": ");
    for(int i = 0; i < text1Split.length; ++i) {
        System.out.println("Split[" + i + "] : " + text1Split[i]);
    }
  }
}

这将打印:

Java programming #data#2016#/data#.:                                                                                                                            
Split[0] : Java programming                                                                                                                                     
Split[1] : 2016                                                                                                                                                 
Split[2] : .  

如果要删除点,可以将正则表达式更改为#[^#]*#\\.?

如果您需要更复杂的东西,则需要更复杂的解析,因为某些标签甚至没有关闭。这个问题没有通用的解决方案,但您可以编写一个适合您需求的简单解析器。

请记住,正则表达式不适合HTML解析,因此在您的情况下不是最佳选择。