0

この文字列からパーツを切り取る方法...

"abb.c.d+de.ee+f.xxx+qaa.+.,,s,"

...私はこれによって位置を知っています:

結果は常に「。」の間にあります。(結果の左側)と「+」(右側)。「」の数を知っています。結果の文字列を区切るために、左側から「+」の数を右側から。

問題は右側です。最後から「+」を数える必要があるためです。

言う...

左側から:開始は4番目の"。"です。
(これは簡単です)、結果は=

"xxx+qaa.+.,,s,"

右側から:終わりは終わりから2番目の「+」にあります!

"xxx[here]+qaa.+.,,s,"

結果は=

"xxx"

.substringと.indexOfを使用して自分でこれを実行しようとしましたが、成功しませんでした...

何か案は?ありがとう

4

3 に答える 3

0

サブストリングの開始を見つけるには、左からストリングをループします。あなたが見たsの数を数え、.あなたが望む数に達したときに停止します。インデックスを。のような変数に格納しますstart

同様に、部分文字列の終わりを見つけるには、右からループして+sを数えます。

于 2012-06-15T16:17:59.663 に答える
0

この問題は、正規表現を使用して解決できます。

Dim r As New Regex("^(.*\.){4}(?<value>.*)(\+.*){2}$")
Dim m As Match = r.Match("abb.c.d+de.ee+f.xxx+qaa.+.,,s,")
Dim result As String = m.Result("${value}")

説明

  • ^ 文字列の先頭を示します
  • (.*\.){4} これは、任意の文字(.)が任意の回数()繰り返さ*れ、その後にピリオド()が続くことを意味します\.。ピリオドは任意の文字のワイルドカードになるため、バックスラッシュを使用してピリオドをエスケープする必要があります。は、パターンを4回繰り返す必要があることを示すために.*\.囲まれています。(){4}
  • (?<value>.*) これは、後のテキストのプレースホルダーを指定します。 valueに割り当てている名前です。は.*、値が任意の数の任意の文字であることを指定します。
  • (\+.*){2} これは、プラス文字(エスケープする必要があります)の後に任意の数の文字が続き、2回繰り返されることを意味します。
  • $ 文字列の終わりを示します
于 2012-06-15T16:31:39.650 に答える
0

このStrReverse関数を使用して、文字シーケンスを逆にして+から、左からカウントすることができます(カウントと同じ方法を使用.)。

于 2012-06-15T17:36:58.877 に答える