2

こんにちは私はからのソリューションを使用しようとしています

C#で文字列内のすべてのパターンインデックスを検索します

しかし、それは私の状況では機能しません

string sentence = "A || ((B && C) || E && F ) && D || G";
string pattern = "(";
IList<int> indeces = new List<int>();
foreach (Match match in Regex.Matches(sentence, pattern))
{
  indeces.Add(match.Index);
}

「解析中」(「-十分ではありません)」というエラーが発生します。

ここで何を間違えたのかわかりません。

助けに感謝します。

ありがとう、

バラン・シニア

4

3 に答える 3

7

ここで何を間違えたのかわかりません。

(正規表現の中で特別な意味を持っていることを忘れてしまいました。使用する場合

string pattern = @"\(";

それはうまくいくはずだと私は信じています。string.IndexOfまたは、正規表現のパターンマッチングを実際に使用していない場合は、そのまま使用し続けます。

正規表現を使用する場合Regex、静的メソッドを使用するのではなく、個人的にオブジェクトを作成します。

Regex pattern = new Regex(Regex.Escape("("));
foreach (Match match in pattern.Matches(sentence))
...

そうすれば、どの引数が入力テキストで、どちらがパターンであるかについて混乱する可能性がかなり少なくなります。

于 2012-06-12T06:37:24.053 に答える
3

これに正規表現を使用するのはやり過ぎです-IndexOfで十分です。

string sentence = "A || ((B && C) || E && F ) && D || G";
string pattern = "(";
IList<int> indeces = new List<int>();
int index = -1;
while (-1 != (index = sentence.IndexOf('(', index+1)))
{
  indeces.Add(index);
}

または、あなたの場合、(正規表現の特殊文字であるため、をエスケープする必要があります。そのため、パターンは次のようになります。"\\("

編集:修正、コビに感謝

于 2012-06-12T06:35:51.510 に答える
2

あなたは脱出する必要があり(ます。

言い換えると:

string pattern = "\\(";
于 2012-06-12T06:36:01.273 に答える