我有一个字符串列表
goal0=1234.4334abc12423423
goal1=-234234
asdfsdf
我想从以目标开头的字符串中提取数字部分, 在上述情况下是
1234.4334, -234234
(如果两个数字片段得到第一个) 我该怎么办呢?
请注意,“goal0 =”是字符串的一部分,goal0不是变量。 因此,我希望第一个数字片段位于“=”之后。
答案 0 :(得分:4)
您可以执行以下操作:
string input = "goal0=1234.4334abc12423423";
input = input.Substring(input.IndexOf('=') + 1);
IEnumerable<char> stringQuery2 = input.TakeWhile(c => Char.IsDigit(c) || c=='.' || c=='-');
string result = string.Empty;
foreach (char c in stringQuery2)
result += c;
double dResult = double.Parse(result);
答案 1 :(得分:3)
试试这个
string s = "goal0=-1234.4334abc12423423";
string matches = Regex.Match(s, @"(?<=^goal\d+=)-?\d+(\.\d+)?").Value;
正则表达式说
(?<=^goal\d+=)
- 背后的正面看法意味着回顾并确保goal(1 or more number)=
位于字符串的开头,但不要使其成为匹配的一部分-?
- 可选的减号(?
表示1或更多)\d+
- 一个或多个数字(\.\d+)?
- 一个小数点,后跟一个或多个数字,这是可选的如果您的字符串包含多个小数点,并且只有第一个小数点后面的第一组数字(如果有的话),这将有效。
答案 2 :(得分:2)
使用正则表达式进行提取:
x = Regex.Match(string, @"\d+").Value;
现在使用以下命令将结果字符串转换为数字:
finalNumber = Int32.Parse(x);
答案 3 :(得分:2)
请试试这个:
string sample = "goal0=1234.4334abc12423423goal1=-234234asdfsdf";
Regex test = new Regex(@"(?<=\=)\-?\d*(\.\d*)?", RegexOptions.Singleline);
MatchCollection matchlist = test.Matches(sample);
string[] result = new string[matchlist.Count];
if (matchlist.Count > 0)
{
for (int i = 0; i < matchlist.Count; i++)
result[i] = matchlist[i].Value;
}
希望它有所帮助。
我一开始没有得到这个问题。对不起,但它现在有效。
答案 4 :(得分:1)
我认为这个简单的表达应该有效:
Regex.Match(string, @"\d+")
答案 5 :(得分:1)
您可以使用C#中的旧VB Val()
函数。这将从字符串的前面提取一个数字,它已经在框架中可用:
result0 = Microsoft.VisualBasic.Conversion.Val(goal0);
result1 = Microsoft.VisualBasic.Conversion.Val(goal1);
答案 6 :(得分:0)
string s = "1234.4334abc12423423";
var result = System.Text.RegularExpressions.Regex.Match(s, @"-?\d+");
答案 7 :(得分:0)
List<String> list = new List<String>();
list.Add("goal0=1234.4334abc12423423");
list.Add("goal1=-23423");
list.Add("asdfsdf");
Regex regex = new Regex(@"^goal\d+=(?<GoalNumber>-?\d+\.?\d+)");
foreach (string s in list)
{
if(regex.IsMatch(s))
{
string numberPart = regex.Match(s).Groups["GoalNumber"];
// do something with numberPart
}
}