SWTBotTree通过正则表达式展开节点

时间:2013-01-24 14:32:59

标签: java regex swtbot

我想使用SWTBotTree.expandNode(final String nodeText,final boolean recursive)函数和一个并不总是完全相同的String。字符串的开头是相同的,但结尾可以变化。我认为可以用reg来解决。进出口。类似于:“字符串的常量部分”+“。*”但它不被认为是re​​g。进出口。我该怎么办?

2 个答案:

答案 0 :(得分:3)

(有些推测,但希望有帮助。)

如果“字符串的常量部分”包含在正则表达式中具有特殊含义的字符,那么这很容易成为问题。解决此问题的方法是使用Pattern.quote。例如:

// ^ to anchor the match to the start of the line/string. May not be required.
Pattern pattern = Pattern.compile("^" + Pattern.quote(expectedPrefix) + ".*");

当然,如果我 使用正则表达式,我只会使用它。否则我只会使用:

if (actualText.startsWith(expectedText))

答案 1 :(得分:2)

我不确定你是怎么做的,但如果你这样做的话:

swtBotTree.expandNode("constant part of string" + ".*", true);

然后你很可能做错了......

javadoc for expandNode没有提及它支持正则表达式......

查看the source(我在搜索时找到的某个版本),expandNode使用另一种名为getItem(...)的方法。该方法与if (item.getText().equals(nodeText))类似。换句话说,该方法使用字符串相等比较,而不是正则表达式匹配。

在Java中,支持正则表达式(请查看Pattern javadocMatcher javadocString.matches(...) javadoc),但前提是在实现中使用了该功能。您不能将正则表达式传递给需要普通String的方法,并期望它进行正则表达式匹配。

简答:

Java具有提供正则表达式功能的类,但SWTBotTree.expandNode(String, boolean)方法不支持正则表达式。

修改

据我了解,SWTBotTree没有直接支持进行正则表达式/通配符查找。

如果您非常想要这样做,您可以尝试以下方式:

 for(SWTBotTreeItem item : swtBotTree.getAllItems()){
     if(item.getText().matches("some regex goes here")){
         item.expand();
     }
 }