簡體   English   中英

在Java Split中使用正則表達式將其字符串化為令牌並僅返回一個令牌

[英]Using regex in Java Split to string into tokens and return only one token

使用Java的split string方法,我知道您可以使用定界符將字符串拆分為標記,但是有沒有辦法使用regex只返回一個特定的標記?

例如,如果我有以下字符串:'item1 | item2 | item3 | item4'是否可以構造一個正則表達式來返回令牌1(item1)或令牌4(item4)?

我知道它可以用多行代碼完成,但是我想特別知道是否可以僅使用正則表達式來完成。

進一步的解釋我認為我沒有正確解釋問題,因此我將擴展此信息。

文本來自數據庫,包含參考數據。 程序員不知道該數據多長時間,或可能包含多少令牌。 例如,數據可能包含以下內容:

ENGLAND|44|ENG|EN

程序員將希望調用一個從該列表中獲取特定解碼的方法。 例如,他們可能想要獲取解碼1(ENGLAND),他們可能想要解碼4(EN)。我想要一個正則表達式解決方案,該解決方案可以工作以返回任何令牌(如果存在)。 單獨的正則表達式不是解決此問題的方法,因為我們不知道列表中可能有多少個解碼。 (理論上可能有數百個)我想知道是否有一種簡單的方法可以告訴我們將正則表達式拆分為令牌,然后給我令牌X,而不拆分為數組,然后返回數組元素X。

給定字符串item1 | item2 | item3 | item4

  • 項目1
^[^|]*
  • 項目4
[^|]*$
  • item2
(?<=\|)[^|]*(?=(?:\|[^|]*){2}$)

可以在這里檢查regex101

item2如何運作

  • (?<=\\|)看看后面斷言比賽開始后litteral |
  • [^|]*匹配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() );
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM