1

少しストリングカットの問題がありました。次のような文字列を取得しました。

@VAR;Variable=Deteministic;Value=mostly;Note=Unless Slave is already in use;Op==;@ENDVAR;

Note は私には必要ないので、Note で始まるすべてを次のセミコロンまで切り取りたいと思います。Replace-Method はいいと思いますが、Note の後に Chars を取得する方法がわかりません。

私はこのようなことを試しました:

 int index1 = rs.IndexOf("Note=");
 int index2 = rs.IndexOf(';', index1+1);
 rs = rs.Remove(index1, index2);

これで十分だと思いましたが、メモがなくてプログラムがエラーを出すと失敗します。正規表現はオプションですが、ここに収まるものは思いつきません。

例は単なるサンプルであることに注意してください。入力文字列がどのように見えるかわかりません。1 つの行には 2 つのメモを含めることができ、別の行には何も含めることができません。あなたの答えでこれを考慮してください。

4

6 に答える 6

1

最初の使用StringBuilder。の方がはるかに効率的ですstring。次に、元のアイデアを保持したい場合:

 int index1 = -1;

while( (index1 = sb.IndexOf("Note=")) >=0)
{
   int index2 = rs.IndexOf(';', index1+1);
   rs = rs.Remove(index1, index2);
}
于 2013-09-19T09:01:52.063 に答える
1

次の正規表現を使用できます。

Note[^;]+;?

少し似ています:

rs = Regex.Replace(rs, @"\bNote[^;]+;?", "");

\b単語境界に一致します。

[^;]セミコロン以外の任意の文字に一致します。

于 2013-09-19T09:02:26.270 に答える
0

コードは次のようになります

int index1 = rs.IndexOf(";Note=");
while(index1 > -1)
{
    int index2 = rs.IndexOf(';', index1 + 1);
    rs = rs.Remove(index1, index2);
    index1 = rs.IndexOf(";Note=");
}
于 2013-09-19T09:02:21.200 に答える