我定义了自定义参数类型,但我定义的正则表达式也匹配单个字符串(不仅仅是字符串列表)。我需要一个正则表达式,它将匹配字符串列表中的字符串,但如果它是单独的字符串,则不会匹配字符串(如果只有 1 个字符串,我没有字符串列表)
@ParameterType("(?:[^,]*)(?:,\s?[^,]*)*")
public List<String> listOfString(String listString) {
List<String> finalList = new ArrayList<String>();
String[] stringArray = listString.split(", ");
for (String string : stringArray) {
finalList.add(string);
}
return finalList;
}
对正则表达式或替代解决方案的任何帮助都会很棒
例如如果我的步骤如下:
- 鉴于我有以下"字符串">
- 鉴于我有以下"字符串1"字符串2">
那么我的步骤定义应该是
@Given("I have the following {string}")
public void myFunction(String string) {}
@Given("I have the following {listOfString}")
public void myFunction(List<String> listOfString) {}
黄瓜不应该抛出matches more than one step definition
例外。如果一个步骤有一个字符串参数,那么它应该执行第一个步骤定义(带有myFunction(String string)
),如果步骤有一个字符串列表,那么它应该执行第二个步骤定义(使用myFunction(List<String> listOfString)
)。
如果您不想匹配空字符串,并且分隔符是逗号,应该至少存在一次:
[^,]+(?:,[^,]+)+
正则表达式演示
如果您不希望部分匹配(如尾随逗号),则可以附加锚点:
^[^,]+(?:,[^,]+)+$