0

我有一个字符串:

"   a.1.2.3 #4567   "

我想把它减少到“1.2.3”。

当前使用 Substring() 和 Remove(),但如果在井号后面有更多数字,则会中断。

这样做的最佳方法是什么?我已经阅读了很多关于 regex 和 string.split 的问题,但我无法得到任何我尝试在 VB.net 中工作的东西。我是否必须进行匹配然后使用匹配结果替换?

任何帮助将非常感激。

4

5 回答 5

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 回答
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 回答
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 回答
0

我猜另一种使用展开的方式

 \d+ (?: \. \d+ )+
于 2013-08-22T19:04:08.077 回答