我需要从字符串中提取子字符串:
给定字符串:"< If( ( h == v ) ): { [ < j = (i - f) ;>, < k = (g + t) ;> ] }>"
我需要两个子字符串:"j = (i - f)"
和"k = (g + t)"
。
为此,我尝试了用户模式正则表达式。这是我的代码:
Pattern pattern = Pattern.compile("[<*;>]");
Matcher matcher = pattern.matcher(out.get(i).toString());
while (matcher.find())
{
B2.add(matcher.group());
}
out.get(i).toString()是我的输入字符串。 B2是一个ArrayList,它将包含两个提取的子串。
但是,在运行上面的代码之后,我得到的输出是:[<, <, ;, >, <, ;, >, >]
。
我的模式不起作用!非常感激您的帮忙。 提前谢谢!
答案 0 :(得分:1)
您可以使用表达式<([^<]+);>
。
这将匹配&lt;和;&gt;
Pattern pattern = Pattern.compile("<([^<]+);>");
Matcher matcher = pattern.matcher(out.get(i).toString());
while (matcher.find())
{
B2.add(matcher.group(1));
}
您可以在regexplanet上看到结果:http://fiddle.re/5rty6
答案 1 :(得分:0)
您的[
和]
会导致您遇到问题。这些符号表示:"match one among the symbols inside of these"
如果删除这些符号,您将获得更好的结果。当你这样做时,你还必须逃避你的尖括号。
下一步将是捕捉群组。您通常会使用(
和)
。
你还必须担心令人讨厌的文物,例如字符串开头的<
,这会弄乱你的正则表达式。为了解决这个问题,你需要从你的正则表达式中排除它们。
你最终可能会
"\<([^<>]*?)\>"
作为你的正则表达式。请务必查看特定的java文档,并转义\
以获取
"\\<([^<>]*?)\\>"
如果你想要在你的尖括号内的下一个<
和>
,那么正则表达式在这类事情上有很多麻烦,也许你应该尝试不同的方法