2013-08-22 138 views
0

我有一个字符串:提取一些数字和小数从字符串

" a.1.2.3 #4567 " 

,我想,以减少只是“1.2.3”。

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

要做到这一点,最好的方法是什么?我已经阅读了正则表达式& string.split上的一堆问题,但我无法获得任何我尝试在VB.net中工作的内容。我需要做一场比赛,然后用比赛结果来替换吗?

任何帮助将不胜感激。

+5

您能否请包括一个解释,帮助我们了解什么原因“1.2.3”是原始字符串的正确输出? – Tormod

+0

你到底做了什么?使用正则表达式将'number.number.number'取出该字符串似乎不太难? – stijn

+0

@Tormod该字符串中的字母数字都不是文字,它可以是“z.4.4.4#666”。我试图从原始字符串得到的是d \。\ d \。\ d。不知道这是否回答你的问题,这里很晚。 – ronald

回答

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

+0

+1因为演示比特很棒(代码也很好):) – varocarbas

+0

很好用。再次感谢您花时间写出来。 – ronald

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); 
} 
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.. 
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" 
} 
+0

或只是'match.Value'。 –

+0

@ m.buettner是啊很好赶上 –

+0

你的解决方案也很好,谢谢。不知道最好的是什么,所以我标记了我尝试接受的第一个。如果你们觉得应该挑选更好的选择,让我知道。 – ronald

0

I g使用展开的另一种方式

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

我会建议给OP一点关于他如何使用你的答案的更多细节。代码片段会很有帮助。 – ean5533

+0

我想我会得到和Sriram的表达一样的结果,除非它能够匹配并返回,比如说“11.22.3.444444”,而不是“1.2.3”? – ronald