次の文字列を前述のパターンに分割する必要があります
String str = "([myString1 - L]*[myString2 - L])/([myString3 - D]+[myString4 - N])";
次の行のような出力が必要です。
1. (
2. [myString1 - L]
3. *
4. [myString2 - L]
5. )
6. /
7. (
8. [myString3 - D]
9. +
10. [myString4 - N]
11. )
これはパーサーの仕事のように見えるというネオイセオンに同意しますが、それでも次のような正規表現を使用できます
var str = "([myString1 - L]*[myString2 - L])/([myString3 - D]+[myString4 - N])";
var result = Regex.Split(str, @"(\[[^]]+\]|[/\*\+\(\)])").Where(r => r != "").ToList();
これにより、必要な出力が得られます(入力が単純なままである限り、たとえば、入力にネストされた式がない場合)。
これは、方程式を解析しようとしているように見えます... (おそらく、Shunting-yar アルゴリズムで使用するためです:) したがって、実際には、方程式を 3 つのカテゴリに分割する必要があります。
正規表現を使用するには、Google で検索します...多くのリソースがありますが、私が使用するチート シートは次のとおりです。
必要な操作のほとんどが含まれています。
上記で説明した各カテゴリは、独自のグループにする必要があります。or
次に、それらを一緒にしたいと思うでしょう。
これにより、次のことがわかります。
(<?operator>[\+\-\*\/])|(<?operand>\w\s\-\[LD])|(<?par>[\(\)])
これにより、パーツごとに 1 つの一致が返されます。したがって、マッチがなくなるまでサイクリングを続けたいと思うでしょう。