簡體   English   中英

Reg表達式-在匹配字符串之間拆分字符串

[英]Reg expression - split string between matching strings

我試圖從一個長字符串中獲取一個字符串數組。 數組由兩個其他字符串(在我的情況下為?????? )之間匹配的字符串組成。 我嘗試了以下代碼,但並沒有得到預期的結果

Pattern pattern = Pattern.compile("\\?\\?\\?(.*?)\\?\\?\\?");
    String[] arrayOfKeys = pattern.split("???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj");

    for (String key : arrayOfKeys) {
        System.out.println(key);
    }

我的預期結果是:

["label.missing", "some.label"]

使用Pattern.matcher()獲取輸入字符串的Matcher ,然后使用Matcher.find()查找所需的模式。 Matcher.find()將找到與提供的Pattern匹配的子字符串。

Pattern pattern = Pattern.compile("\\?{3}(.*?)\\?{3}");
Matcher m = pattern.matcher(inputString);

while (m.find()) {
    System.out.println(m.group(1));
}

Pattern.split()將使用您的模式作為分隔符來分割字符串(然后分隔符部分將被丟棄),在這種情況下,這顯然不是您想要的。 您的正則表達式旨在匹配您要提取的文本。

我將模式縮短為使用精確地重復3次 {3}量詞,而不是寫\\? 3次。

我將使用您要拆分的內容創建一個字符串輸入,然后在其上調用input.split()。

String input = "???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj";
String[] split = input.split("\\?\\?\\?");

在這里嘗試: http : //ideone.com/VAmCyu

    Pattern pattern = Pattern.compile("\\?{3}(.+?)\\?{3}");
    Matcher matcher= pattern.matcher("???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj");

     List<String> aList = new ArrayList<String>();

     while(matcher.find()) {
         aList.add(matcher.group(1));
     }


    for (String key : aList) {
        System.out.println(key);
    }

暫無
暫無

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

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