0

我需要从字符串中提取子字符串:

给定字符串: "< 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,它将包含两个提取的子字符串。

但是,运行上面的代码后,我得到的输出是 : [<, <, ;, >, <, ;, >, >]

我的模式不起作用!非常感激您的帮忙。提前致谢!

4

2 回答 2

1

您可以使用表达式<([^<]+);>

这将匹配 < 和 ;> 之间的内容

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

于 2013-02-27T18:58:40.433 回答
0

[]正在给你带来问题。这些符号的意思是:"match one among the symbols inside of these" 如果你去掉它们,你会得到更好的结果。这样做时,您还必须避开尖括号。

下一步将是捕获这些组。你通常使用(and )

您还必须担心令人讨厌的工件,例如<字符串开头的那些会弄乱您的正则表达式的工件。为了解决这个问题,您需要从您的正则表达式中排除这些内容。

你可能最终得到

"\<([^<>]*?)\>"

作为你的正则表达式。请务必检查特定的 java 文档并转义您\的最终结果

"\\<([^<>]*?)\\>"

如果你想在你的尖括号内下一个<>正则表达式在这种事情上有很多麻烦,也许你应该尝试不同的方法

这是一个示例正则表达式

于 2013-02-27T18:56:58.380 回答