0

文字列を区切り文字としてセミコロン ( ;) で区切る必要があります。括弧内のセミコロンは無視してください。

例:

string inputString = "(Apple;Mango);(Tiger;Horse);Ant;Frog;";

文字列の出力リストは次のようになります。

(Apple;Mango)
(Tiger;Horse)
Ant
Frog

その他の有効な入力文字列は次のとおりです。

string inputString = "The fruits are (mango;apple), and they are good"

上記の文字列は単一の文字列に分割する必要があります

"The fruits are (mango;apple), and they are good"

string inputString = "The animals in (African (Lion;Elephant) and Asian(Panda; Tiger)) are endangered species; Some plants are endangered too."

上記の文字列は、以下に示すように 2 つの文字列に分割する必要があります。

"The animals in (African (Lion;Elephant) and Asian(Panda; Tiger)) are endangered species"
"Some plants are endangered too."

よく検索しましたが、上記のシナリオに対する答えが見つかりませんでした。

車輪を再発明せずにこれを達成する方法を知っている人はいますか?

4

2 に答える 2

1

区切り記号ではなく、保持したいものに一致する正規表現を使用します。

string inputString = "(Apple;Mango);(Tiger;Horse);Ant;Frog;";

MatchCollection m = Regex.Matches(inputString, @"\([^;)]*(;[^;)]*)*\)|[^;]+");

foreach (Match x in m){
  Console.WriteLine(x.Value);
}

出力:

(Apple;Mango)
(Tiger;Horse)
Ant
Frog

式のコメント:

\(           opening parenthesis
[^;)]*       characters before semicolon
(;[^;)]*)*   optional semicolon and characters after it
\)           closing parenthesis
|            or
[^;]+        text with no semicolon

注: 上記の式は、セミコロンなしの括弧内の値 (例:(Lark)および複数のセミコロン (例: ) も受け入れます) (Lark;Pine;Birch)。また、空の値もスキップします。たとえば";;Pine;;;;Birch;;;"、10 項目ではなく 2 項目になります。

于 2012-09-28T14:28:21.380 に答える
0

括弧で囲まれたケースを「通常の」ケースとは別に処理して、前者でセミコロンが省略されるようにします。

これを達成するための正規表現 (入力内の単一の要素に一致する) は、次のようになります (テストされていません)。

"\([A-Za-z;]+\)|[A-Za-z]+"
于 2012-09-28T14:30:41.140 に答える