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”?