簡體   English   中英

Java正則表達式模式匹配器

[英]Java regex pattern matcher

我有以下格式的字符串:

String name = "A|DescA+B|DescB+C|DescC+...X|DescX+"

所以重復模式是?|?+ ,我不知道會有多少個。 我要提取的部分是| ...之前的部分,因此對於我的示例,我要提取一個包含以下內容的列表(例如ArrayList):

[A, B, C, ... X]

我嘗試了以下模式:

(.+)\\|.*\\+

但這不符合我想要的方式嗎? 有什么建議么?

要將其轉換為列表,您可以執行以下操作:

String name = "A|DescA+B|DescB+C|DescC+X|DescX+";
Matcher m = Pattern.compile("([^|]+)\\|.*?\\+").matcher(name);
List<String> matches = new ArrayList<String>();
while (m.find()) {
    matches.add(m.group(1));
}

這給出了列表:

[A, B, C, X]

注意? 在中間,這樣可以防止正則表達式的第二部分占用整個字符串,因為它使* 惰性,而不是greedy

您正在使用任何字符( . ),其中包括| 因此,解析器會繼續用力嚼所有內容,一旦完成獲取任何字符的操作,它就會尋找| ,但是什么都沒有了。

因此,嘗試匹配 |任何字符| 像這樣:

"([^|]+)\\|.*\\+"

並且如果適合,請確保您的所有| 在使用^的字符串的開頭,在使用$的字符串的結尾有一個+:

"^([^|]+)\\|.*\\+$"

更新:蒂姆·皮茨克(Tim Pietzcker)提出了一個很好的觀點:由於您已經匹配了,直到找到| ,您也可以匹配其余字符串並完成操作:

"^([^|]+).*\\+$"

UPDATE2:順便說一句,如果您只想獲取字符串的第一部分,則可以使用以下方法簡化操作:

myString.split("\\|")[0]

另一個想法:查找+ (或字符串開頭)和|之間的所有字符|

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("(?<=^|[+])[^|]+");
Matcher regexMatcher = regex.matcher(subjectString);
    while (regexMatcher.find()) {
        matchList.add(regexMatcher.group());
    } 

我認為最簡單的解決方案是用\\\\+分割,然后對每個部分應用(.+?)\\\\|.*模式提取所需的組。

暫無
暫無

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

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