[英]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.