Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串中提取一些数字和小数_C#_Wpf_Regex_Vb.net - Fatal编程技术网

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

C# 从字符串中提取一些数字和小数,c#,wpf,regex,vb.net,C#,Wpf,Regex,Vb.net,我有一个字符串: " a.1.2.3 #4567 " 我想把它简化为“1.2.3” 当前正在使用Substring()和Remove(),但如果在磅号后面有更多的数字,则会中断 做这件事最好的方法是什么?我已经读了很多关于regex&string.split的问题,但是我在VB.net中没有得到任何我想要的东西。我是否需要进行匹配,然后使用匹配结果进行替换 任何帮助都将不胜感激 这应该有效: string input = " a.1.2.3 #4567 "; int pound

我有一个字符串:

"   a.1.2.3 #4567   "
我想把它简化为“1.2.3”

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

做这件事最好的方法是什么?我已经读了很多关于regex&string.split的问题,但是我在VB.net中没有得到任何我想要的东西。我是否需要进行匹配,然后使用匹配结果进行替换

任何帮助都将不胜感激

这应该有效:

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());
}
string input=“a.1.2.3#4567”;
int poundIndex=input.IndexOf(“#”);
如果(磅指数>=0)
{
string relevantPart=input.Substring(0,poundIndex.Trim();
IEnumerable numPart=relevantipart.SkipWhile(c=>!Char.IsDigit(c));
字符串结果=新字符串(numPart.ToArray());
}

这应该可以:

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());
}
string input=“a.1.2.3#4567”;
int poundIndex=input.IndexOf(“#”);
如果(磅指数>=0)
{
string relevantPart=input.Substring(0,poundIndex.Trim();
IEnumerable numPart=relevantipart.SkipWhile(c=>!Char.IsDigit(c));
字符串结果=新字符串(numPart.ToArray());
}

如果磅符号是最相关的位,请使用
拆分
。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#的翻译:


如果磅号是最相关的位,请依赖于
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[] 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[] 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   ";
 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"
 }

我想另一种方法是使用展开的

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

我想另一种方法是使用展开的

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


您能否提供一个解释,帮助我们了解“1.2.3”是基于什么基础从原始字符串中正确输出的?您到底尝试了什么?使用正则表达式从该字符串中获取
number.number.number
似乎并不难?@Tormod该字符串中的字母数字都不是文字,可能是“z.4.4.4#666”。我想从原始字符串中得到的是d\.\d\.\d。不确定这是否回答了你的问题,现在已经很晚了。@ronald,在
匹配中使用
\d\.\d
有什么不对?@m.buettner我试着用这个例子作为基础,但出于某种原因它返回了一个空值。你能给我们解释一下“1.2.3”的基础吗原始字符串的输出是否正确?您到底尝试了什么?使用正则表达式从该字符串中获取
number.number.number
似乎并不难?@Tormod该字符串中的字母数字都不是文字,可能是“z.4.4.4#666”。我想从原始字符串中得到的是d\.\d\.\d。不确定这是否回答了你的问题,现在已经很晚了。@ronald,在
匹配中使用
\d\.\d
有什么不对?@m.buettner我试着用这个例子作为基础,但出于某种原因它返回了一个空值。+1因为演示位非常出色(代码也很好):)效果很好。再次感谢您花时间写出来。+1因为演示位非常出色(代码也很好):)效果非常好。再次感谢您抽出时间写出来。或者只是
match.Value
。您的解决方案也很有效,谢谢。我不确定哪一个是最好的,所以我把我试过的第一个标为接受。如果你们觉得应该选择一个更好的选择,请告诉我。即使字符串中没有
#
字符,我的解决方案也应该有效,因为其他解决方案无法做到这一点,您可以根据需要选择一个。或者只需
匹配.Value
。您的解决方案也很有效,谢谢。我不确定哪一个是最好的,所以我把我试过的第一个标为接受。如果你们觉得应该选择一个更好的选择,请告诉我。我的解决方案应该可以工作,即使字符串中没有
#
字符,如果其他解决方案无法做到这一点,那么您可以根据您的需要选择一个。我建议向OP提供更多关于如何使用您答案的详细信息。一段代码片段会很有帮助。我猜我会得到和Sriram表达式相同的结果,只是它能够匹配并返回,比如说“11.22.3.444444”,而不仅仅是“1.2.3”?我建议给OP更多关于他如何使用你的答案的细节。一段代码片段会很有帮助。我猜我会得到与Sriram表达式相同的结果,只是它能够匹配并返回,比如说“11.22.3.444444”,而不仅仅是“1.2.3”?