在Java中使用正则表达式将字符串串入标记并仅返回一个标记

时间:2018-01-16 13:45:44

标签: java regex string

使用Java的拆分字符串方法,我知道您可以通过分隔符将字符串拆分为标记,但是有一种方法可以使用正则表达式只返回一个特定的标记吗?

例如,如果我有以下字符串:'item1 | item2 | item3 | item4' 有没有办法构造一个正则表达式来返回说令牌1(item1)或令牌4(item4)?

  

我知道它可以在多行代码中完成,但我想知道   特别是如果只能使用正则表达式完成。

进一步说明 我不相信我已经准确地解释了我的问题所以我会扩展这些信息。

文本来自数据库并包含参考数据。程序员不知道这些数据有多长,或者它可能包含多少个令牌。 例如,数据可能包含以下内容:

ENGLAND|44|ENG|EN

程序员想要调用一个从该列表中获取特定解码的方法。例如,他们可能想要解码1(英格兰),他们可能想要解码4(EN) 我想要一个正则表达式解决方案,如果它存在,它将返回任何令牌。单独的正则表达式不是这个问题的解决方案,因为我们不知道列表中可以有多少个解码。 (理论上可能有数百种)我想知道是否有一种简单的方法可以将正则表达式分解为标记,然后给我标记X,而不会分裂成数组,然后返回数组元素X.

1 个答案:

答案 0 :(得分:2)

给出字符串item1 | item2 | item3 | item4

  • ITEM1
^[^|]*
  • ITEM4
[^|]*$
  • ITEM2
(?<=\|)[^|]*(?=(?:\|[^|]*){2}$)

可以查看here regex101

item2的工作原理

  • (?<=\|)在后​​面的|
  • 后面查看断言匹配
  • [^|]*匹配除|
  • 以外的0个或多个字符
  • (?=(?:\|[^|]*){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() );
    }