假設我有這個字串:
111 222 (333 444) 555 666 (777) 888
我想要的是:
第 1 組:111 222
第 2 組:333 444
第 3 組:555 666
第 4 組:777
第 5 組:888
我有這個正則運算式\(([^\)] )\),但它只捕獲括號之間的內容。
uj5u.com熱心網友回復:
您可以使用
String text = "111 222 (333 444) 555 666 (777) 888";
RegExp rx = new RegExp(r'\(([^()] )\)|[^()] ');
var values = rx.allMatches(text).map((z) => z.group(1) != null ? z.group(1)?.trim() : z.group(0)?.trim()).toList();
print(values);
// => [111 222, 333 444, 555 666, 777, 888]
請參閱正則運算式演示。輸出要么是修剪的第 1 組值,要么是整個匹配值(也修剪)。該\(([^()] )\)|[^()] 模式匹配 a (,然后將除括號之外的任何一個或多個字符捕獲到組 1 中,然后匹配 a ),或匹配除括號之外的一個或多個字符。
為避免出現空項,您可能需要至少一個非空格:
\(\s*([^\s()][^()]*)\)|[^\s()][^()]*
請參閱此正則運算式演示。詳情:
\(- 一個(字符\s*- 零個或多個空格([^\s()][^()]*)- 第 1 組:除空格之外的字符,(和),然后是除圓括號之外的零個或多個字符\)- 一個)字符|- 或者[^\s()][^()]*- 除空格之外的字符,(and),然后是除圓括號之外的零個或多個字符。
uj5u.com熱心網友回復:
如果您想按相同的字符對字串進行分組,我會考慮使用堆疊來保持一致的連續字符的運行存盤。一旦你到達一個不匹配的字符,你可以清除整個堆疊,直到它為空。
您可以添加更多代碼(if 陳述句邏輯)以在讀取左括號后繼續填充堆疊,直到讀取右括號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458791.html
