0

次の文字列を前述のパターンに分割する必要があります

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. )
4

3 に答える 3

2

これはパーサーの仕事のように見えるというネオイセオンに同意しますが、それでも次のような正規表現を使用できます

var str = "([myString1 - L]*[myString2 - L])/([myString3 - D]+[myString4 - N])";
var result = Regex.Split(str, @"(\[[^]]+\]|[/\*\+\(\)])").Where(r => r != "").ToList();

これにより、必要な出力が得られます(入力が単純​​なままである限り、たとえば、入力にネストされた式がない場合)。

于 2013-10-14T12:14:17.907 に答える
1

これは、方程式を解析しようとしているように見えます... (おそらく、Shunting-yar アルゴリズムで使用するためです:) したがって、実際には、方程式を 3 つのカテゴリに分割する必要があります。

  1. 演算子 (*、/、+、- ...)
  2. オペランド ([myString1 - D]
  3. 括弧

正規表現を使用するには、Google で検索します...多くのリソースがありますが、私が使用するチート シートは次のとおりです

必要な操作のほとんどが含まれています。

上記で説明した各カテゴリは、独自のグループにする必要があります。or次に、それらを一緒にしたいと思うでしょう。

これにより、次のことがわかります。

(<?operator>[\+\-\*\/])|(<?operand>\w\s\-\[LD])|(<?par>[\(\)])

これにより、パーツごとに 1 つの一致が返されます。したがって、マッチがなくなるまでサイクリングを続けたいと思うでしょう。

于 2013-10-14T12:19:01.863 に答える