正则表达式:从String中提取String

时间:2014-07-04 14:44:39

标签: java regex

我需要一个正则表达式,可以从String中提取一部分。我通过使用DOM解析XML-Document来获取此String。然后我在这个字符串中寻找“§regex”部分,现在我尝试提取它的值。例如“([A-ZÄÖÜ] {1,3} [ - ] [A-Z] {1,2} [1-9] [0-9] {0,3})”来自其他人。

问题是,我不知道如何确保提取的部分以“)”结束 这个正则表达式需要适用于给定的每个值。目标是在“§regex=”之后只在括号中写入包含括号的字符串。

<UML:TaggedValue tag="description" value=" random Text §regex=([A-ZÄÖÜ]{1,3}[- ][A-Z]{1,2}[1-9][0-9]{0,3}) random text"/>

private List<String> findRegex() {
    List<String> forReturn = new ArrayList<String>();
    for (String str : attDescription) {
        if (str.contains("§regex=")) {
            String s = str.replaceAll(regex);
            forReturn.add(s);
        }
    }
    return forReturn;
}

attDescription是一个列表,其中包含在解析的XML文档中找到的所有属性。

到目前为止,我尝试了这个正则表达式:".*(§regex=)(.*)[)$].*", "$2"但这会切断“)”并且不会删除搜索部分前面的文本。即使在http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html的帮助下,我也真的不明白如何得到我需要的东西。

2 个答案:

答案 0 :(得分:2)

如果我使用它代替String s = str.replaceAll(regex);

,它似乎对我有用(无论如何都是这个例子)
String s = str.replaceAll( ".*§regex=(\\(.*\\)).*", "$1" );

它只是在§regex=之后查找由括号括起来的子字符串。

答案 1 :(得分:0)

这似乎有效:

String s = str.replaceAll(".*§regex=\\((.*)[)].*", "$1");

注意:

  • 逃离前方支架
  • 字符类中的$是文字$ - 忽略它,因为你的正则表达式总是以括号结尾
  • 无需捕获固定文本

测试代码,注意这适用于正则表达式中/中的括号:

String str = "random Text §regex=(([A-ZÄÖÜ]{1,3}[- ][A-Z]{1,2}[1-9][0-9]{0,3})) random text";
String s = str.replaceAll(".*§regex=\\((.*)[)].*", "$1");
System.out.println(s);

输出:

([A-ZÄÖÜ]{1,3}[- ][A-Z]{1,2}[1-9][0-9]{0,3})