我有一个字符串列表
goal0=1234.4334abc12423423
goal1=-234234
asdfsdf
我想从以目标开头的字符串中提取数字部分,在上述情况下是
1234.4334, -234234
(如果两个数字片段得到第一个)我应该如何轻松地做到这一点?
请注意,“goal0=”是字符串的一部分,goal0 不是变量。因此,我想要“=”之后的第一个数字片段。
我有一个字符串列表
goal0=1234.4334abc12423423
goal1=-234234
asdfsdf
我想从以目标开头的字符串中提取数字部分,在上述情况下是
1234.4334, -234234
(如果两个数字片段得到第一个)我应该如何轻松地做到这一点?
请注意,“goal0=”是字符串的一部分,goal0 不是变量。因此,我想要“=”之后的第一个数字片段。
您可以执行以下操作:
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);
试试这个
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+)?
- 小数点后跟 1 个或多个数字,这是可选的如果您的字符串包含多个小数点,这将起作用,并且如果有的话,它只会采用第一个小数点后的第一组数字。
使用正则表达式进行提取:
x = Regex.Match(string, @"\d+").Value;
现在使用以下命令将结果字符串转换为数字:
finalNumber = Int32.Parse(x);
请试试这个:
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;
}
希望能帮助到你。
起初我没有得到这个问题。对不起,但它现在有效。
我认为这个简单的表达式应该有效:
Regex.Match(string, @"\d+")
您可以使用 C# 中的旧 VBVal()
函数。这将从字符串的前面提取一个数字,并且它已经在框架中可用:
result0 = Microsoft.VisualBasic.Conversion.Val(goal0);
result1 = Microsoft.VisualBasic.Conversion.Val(goal1);
string s = "1234.4334abc12423423";
var result = System.Text.RegularExpressions.Regex.Match(s, @"-?\d+");
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
}
}