使用Java的拆分字符串方法,我知道您可以通过分隔符将字符串拆分为标记,但是有一种方法可以使用正则表达式只返回一个特定的标记吗?
例如,如果我有以下字符串:'item1 | item2 | item3 | item4' 有没有办法构造一个正则表达式来返回说令牌1(item1)或令牌4(item4)?
我知道它可以在多行代码中完成,但我想知道 特别是如果只能使用正则表达式完成。
进一步说明 我不相信我已经准确地解释了我的问题所以我会扩展这些信息。
文本来自数据库并包含参考数据。程序员不知道这些数据有多长,或者它可能包含多少个令牌。 例如,数据可能包含以下内容:
ENGLAND|44|ENG|EN
程序员想要调用一个从该列表中获取特定解码的方法。例如,他们可能想要解码1(英格兰),他们可能想要解码4(EN) 我想要一个正则表达式解决方案,如果它存在,它将返回任何令牌。单独的正则表达式不是这个问题的解决方案,因为我们不知道列表中可以有多少个解码。 (理论上可能有数百种)我想知道是否有一种简单的方法可以将正则表达式分解为标记,然后给我标记X,而不会分裂成数组,然后返回数组元素X.
答案 0 :(得分:2)
给出字符串item1 | item2 | item3 | item4
^[^|]*
[^|]*$
(?<=\|)[^|]*(?=(?:\|[^|]*){2}$)
可以查看here regex101
item2的工作原理
(?<=\|)
在后面的|
[^|]*
匹配除|
(?=(?:\|[^|]*){2}$)
声称直到行尾<2} |
正好提取item2的Java代码
String str = "item1|item2|item3|item4";
Pattern p = Pattern.compile( "(?<=\\|)[^|]*(?=(?:\\|[^|]*){2}$)" );
Matcher m = p.matcher( str );
if (m.find()) {
System.out.println( m.group() );
}