我需要一个正则表达式,可以从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的帮助下,我也真的不明白如何得到我需要的东西。
答案 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})