从字符串中提取一些数字和小数

时间:2013-08-22 11:45:03

标签: c# wpf regex vb.net

我有一个字符串:

"   a.1.2.3 #4567   "

我希望将其减少到“1.2.3”。

目前正在使用Substring()和Remove(),但如果在英镑符号后面有更多数字,则会中断。

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

非常感谢任何帮助。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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..  

答案 2 :(得分: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"
 }

答案 3 :(得分: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);
}

答案 4 :(得分:0)

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

 \d+ (?: \. \d+ )+