0

私は文字列を持っています:

"   a.1.2.3 #4567   "

それを「1.2.3」に減らしたいと思います。

現在 Substring() と Remove() を使用していますが、ポンド記号の後にさらに数字があると壊れます。

これを行う最善の方法は何ですか?regex と string.split に関する多くの質問を読みましたが、VB.net で動作させようとしても何も得られません。マッチを行い、マッチ結果を使用して置換する必要がありますか?

どんな助けでも大歓迎です。

4

5 に答える 5

1

これを試して...

String[] splited = split("#");
String output = splited[0].subString(2); // 1 is the index of the "." after "a" considering there are no blank spaces before it..  
于 2013-08-22T11:57:21.477 に答える
1

ここにそれを行う正規表現の方法があります

 string input = "   a.1.2.3 #4567   ";
 Regex regex = new Regex(@"(\d\.)+\d");
 var match = regex.Match(input);
 if(match.Success)
 {
     string output = match.Groups[0].Value;//"1.2.3"
     //Or
     string output = match.Value;//"1.2.3"
 }
于 2013-08-22T12:03:03.167 に答える
1

これはうまくいくはずです:

string input = "   a.1.2.3 #4567   ";
int poundIndex = input.IndexOf("#");
if(poundIndex >= 0)
{
    string relevantPart = input.Substring(0, poundIndex).Trim();
    IEnumerable<Char> numPart = relevantPart.SkipWhile(c => !Char.IsDigit(c));
    string result = new string(numPart.ToArray());
}

Demo

于 2013-08-22T11:50:57.443 に答える
0

unrolled を使用した別の方法だと思います

 \d+ (?: \. \d+ )+
于 2013-08-22T19:04:08.077 に答える
0

ポンド記号が最も関連性の高いビットである場合は、に依存しSplitます。サンプル VB.NET コード:

Dim inputString As String = "   a.1.2.3 #4567  "
If (inputString.Contains("#")) Then
    Dim firstBit As String = inputString.Split("#")(0).Trim()
    Dim headingToRemove As String = "a."
    Dim result As String = firstBit.Substring(headingToRemove.Length, firstBit.Length - headingToRemove.Length)
End If

これが多言語の質問である限り、C# への翻訳は次のとおりです。

string inputString = "   a.1.2.3 #4567  ";
if (inputString.Contains("#"))
{
    string firstBit = inputString.Split('#')[0].Trim();
    string headingToRemove = "a.";
    string result = firstBit.Substring(headingToRemove.Length, firstBit.Length - headingToRemove.Length);
}
于 2013-08-22T11:52:56.720 に答える