私は文字列を持っています:
" a.1.2.3 #4567 "
それを「1.2.3」に減らしたいと思います。
現在 Substring() と Remove() を使用していますが、ポンド記号の後にさらに数字があると壊れます。
これを行う最善の方法は何ですか?regex と string.split に関する多くの質問を読みましたが、VB.net で動作させようとしても何も得られません。マッチを行い、マッチ結果を使用して置換する必要がありますか?
どんな助けでも大歓迎です。
これを試して...
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..
ここにそれを行う正規表現の方法があります
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"
}
これはうまくいくはずです:
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());
}
unrolled を使用した別の方法だと思います
\d+ (?: \. \d+ )+
ポンド記号が最も関連性の高いビットである場合は、に依存し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);
}