我对java还很陌生,正在尝试找到一种更好的方法。可能使用正则表达式。
String text = test.get(i).toString()
// text looks like this in string form:
// EnumOption[enumId=test,id=machine]
String checker = text.replace("[","").replace("]","").split(",")[1].split("=")[1];
// checker becomes machine
我的目标是分析它 text
然后再回来 machine
. 这就是我在上面代码中所做的。
但这看起来很难看。我想知道什么样的正则表达式可以在这里使用,使这一点更好?或者另一个建议?
4条答案
按热度按时间3qpi33ja1#
正则表达式当然可以使用,但有时性能较差,可读性较差,更容易出现错误。
我建议你不要使用任何你自己没有想到的正则表达式,或者至少完全理解。
附言:我认为你的解决方案实际上是相当可读的。
下面是另一个非正则表达式版本:
不是帮你的忙,但是下一票很痛,所以你来吧:
lp0sw83n2#
假设您使用的是polarion alm api,那么应该使用
EnumOption
的getId
方法,而不是通过字符串对值进行解压和重新分析:swvgeqrz3#
使用正则表达式“lookback:
参见regex101。
在java中,如下所示:
这会导致
zed5wv104#
使用replace和split函数不会考虑数据的结构。
如果您想使用regex,您可以只使用一个不带任何lookaround的捕获组,其中enum可以是除
]
逗号和id可以是除]
.id的值将在捕获组1中。
解释
\bEnumOption
匹配EnumOption
以单词边界开头\[enumId=
匹配[enumId=
[^=,\]]+,
匹配1+次任何字符,除了=
,
以及]
id=
逐字匹配(
捕获组1[^\]]+
匹配1+次任何字符,除了]
)\]
正则表达式演示| java演示输出
如果可以有更多逗号分隔的值,那么也只能使用取反的字符类来匹配id
[^][]*
前后匹配id要保持在方括号边界内。在java中
正则表达式演示