在java中提取特定字符串

时间:2014-01-02 08:56:55

标签: java regex string

我正在尝试从字符串中提取特定字符。我尝试过使用Split和replace来获取数据。但是还有其他的选择吗? 以下是输入字符串

  Input1-    
    q={!tag=tagForType}(Type:(ABC))

  Input2-  
    q={!tag=tagForType}(Type:(ABC OR XYZ))

列表格式需要输出。

  Output1-  List1{ABC}
  Output2- List1{ABC ,XYZ)

以下是我尝试提取此类数据的代码

 if (s.contains("Type")) {                               
    List = s.split("Type:\\(");
    String s1 = List[1].replaceAll("\\W", "");
    List1 = s1.split("OR");                                
 }

还有其他选择吗?

2 个答案:

答案 0 :(得分:2)

使用正则表达式查看此解决方案。

    String input = "q={!tag=tagForType}(Type:(ABC OR XyZ OR ORT))(Type:(ABC))";
    Pattern findType = Pattern.compile("Type:(\\([ \\w]+\\))");
    Pattern extractLists = Pattern.compile("(\\(| OR )([\\w]+)");
    Matcher typeMatcher = findType.matcher(input);
    while (typeMatcher.find()) {
        System.out.println(typeMatcher.group(1));

        Matcher listMatcher = extractLists.matcher(typeMatcher.group(1));
        while (listMatcher.find()) {
            System.out.println(listMatcher.group(2));
        }
    }

这将打印以下内容:

(ABC OR XYZ OR ORT)
ABC
XyZ
ORT
(ABC)
ABC

当然,您可能需要对这些群组做些其他事情,我目前只是将它们打印出来。

请注意,这里我演示了此解决方案如何在同一个字符串中使用多个Type:,我认为您的解决方案无法处理。

目前我还假设部件之间的间隔数量是固定的,但如果使用正则表达式,这也可以处理。

答案 1 :(得分:0)

试试这个:

 String EXAMPLE_TEST = "q={!tag=tagForType}(Type:(ABC))";

 pattern = "^.*?Type:.*?([\\w\\s]+).*";

 String updated = EXAMPLE_TEST.replaceAll(pattern, "$1"  ); 

 System.out.println(updated);

用OR分割

String[] split = updated.split(" OR ");
for(int i=0;i<split.length;i++) 
 System.out.println(split[i]);