[英]Need help in figuring out the right regex pattern
我需要从字符串中提取子字符串:
给定字符串: "< 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,它将包含两个提取的子字符串。
但是,运行上面的代码后,我得到的输出是: [<, <, ;, >, <, ;, >, >]
。
我的模式不起作用! 非常感激你的帮助。 提前致谢!
您可以使用表达式<([^<]+);>
。
这将匹配<和;>之间的内容
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
您的[
和]
会给您带来麻烦。 这些符号的含义是: "match one among the symbols inside of these"
如果删除这些"match one among the symbols inside of these"
,将会得到更好的结果。 这样做时,您还必须避开尖括号。
下一步将是捕获组。 您通常使用(
和)
。
您还必须担心令人讨厌的工件,例如字符串开头的<
,它将与您的正则表达式混淆。 为了解决这个问题,您需要将它们从正则表达式中排除。
你可能最终会
"\<([^<>]*?)\>"
作为您的正则表达式。 确保检查特定的Java文档并转义\\
以获取最终结果
"\\<([^<>]*?)\\>"
如果您想在尖括号内使用其他<
和>
,则regex在这种情况下会遇到很多麻烦,也许您应该尝试其他方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.