【发布时间】:2014-08-25 22:29:37
【问题描述】:
我需要一个能够从字符串中提取一部分的正则表达式。我通过使用 DOM 解析 XML 文档来获取此字符串。然后我在这个字符串中寻找“§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 的帮助,我也真的不明白如何获得我需要的东西。
【问题讨论】:
-
您应该提供一些要匹配的字符串示例和预期结果,而不要使用这种奇怪的 §regex 修饰。代码 sn-p 令人困惑 - 什么是正则表达式?
-
假设正则表达式没有捕获组、非捕获组、文字括号或空格是非常有限的。所以看起来,除非你能知道它后面的文本的结构,否则我看不出你是怎么做到的。也许正则表达式也可以以
=regex[squiggle]结束。然后,您将有一个明确的分隔符来搜索。您是否可以通过这种方式控制输入? (我也会考虑使用比 squiggle 更标准的字符。) -
replaceAll 需要第二个参数。
-
试试这个:
".*§regex=(\\(.*\\)).*", "$1" -
另外,正则表达式中的美元符号
.*(§regex=)(.*)[)$].*不能工作,因为它期望文本在行尾之后存在。