簡體   English   中英

如何通過方括號外的字符用正則表達式划分字符串?

[英]How to divide a string with a regex through characters that are outside square brackets?

我有這個字符串:

PARTNER6;PARTNER7[PORTAL4;PORTAL5];PARTNER1[PARTNER1WEB]    -> ∞

我想這樣划分:

PARTNER6

PARTNER7[PORTAL4;PORTAL5]

PARTNER1[PARTNER1WEB]

我嘗試使用這個表達式,但它划分了所有內容,包括括號中的內容

[\s,;]+

我不知道如何只划分括號外的內容

您可以使用此正則表達式來獲取所有匹配項:

\w+(?:\[[^]]*\]\w*)*\w*

正則表達式演示

正則表達式詳細信息:

  • \w+ :匹配 1+ 個單詞字符
  • (?:\[[^]]*\]\w*)* :匹配[...]字符串后跟 0 個或多個單詞字符。 重復此組 0 次或多次
  • \w* :匹配0個或多個單詞字符

代碼:

jshell> String regex = "\\w+(?:\\[[^]]*\\]\\w*)*\\w*";
regex ==> "\\w+(?:\\[[^]]*\\]\\w*)*\\w*"

jshell> String string = "PARTNER6;PARTNER7[PORTAL4;PORTAL5];PARTNER1[PARTNER1WEB]    -> ∞";
string ==> "PARTNER6;PARTNER7[PORTAL4;PORTAL5];PARTNER1[PARTNER1WEB]    -> ∞"

jshell>  Pattern.compile(regex).matcher(string).results().map(MatchResult::group).collect(Collectors.toList());
$3 ==> [PARTNER6, PARTNER7[PORTAL4;PORTAL5], PARTNER1[PARTNER1WEB]]

我會在這里使用正則表達式查找所有方法:

String input = "PARTNER6;PARTNER7[PORTAL4;PORTAL5];PARTNER1[PARTNER1WEB]";
String pattern = "(\\w+(?:\\[.*?\\])?);?";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
while (m.find()) {
    System.out.println(m.group(1));
}

這打印:

PARTNER6
PARTNER7[PORTAL4;PORTAL5]
PARTNER1[PARTNER1WEB]

上面使用的正則表達式模式匹配帶有\w+的單詞,后跟方括號中的可選術語,再后跟可選的分號。

暫無
暫無

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

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