下面我有一段代码可以从一段文本中提取数字值。因此,如果我有字符串+12 is on same day
,那么它将提取12。
但是如果我有像-12 is on the same day,
这样的负数,我希望它提取-12而不是12。
我如何提取减号?
foreach (char c in alternativeAirportPrice.Text)
{
if (char.IsNumber(c))
{
string test = "-12 on same day";
string alternativeAirportPriceValue = string.Join("", test.ToCharArray()
.Where(x => char.IsDigit(x)).ToArray());
return alternativeAirportPriceValue;
}
}
答案 0 :(得分:5)
您可以使用正则表达式:
-?\d+
这将匹配任何数字字符串或-
后跟一串数字。
string text = "-12 on the same day";
var match = Regex.Match(text, "-?\\d+");
return match.Value;
请记住向System.Text.RegularExpressions
添加using指令!
答案 1 :(得分:2)
根据问题的预期结果,这应该是您想要的。请注意,为此只需LINQ就足够了foreach
循环:
string.Join("", test.Split(' ').Where(x => int.TryParse(x , out _)).ToArray());
return alternativeAirportPriceValue;
答案 2 :(得分:0)
试试这个:
public IEnumerable<int> ExtractNumbers(string text)
{
text += " ";
var temp = string.Empty;
for (var i = 0; i < text.Length; i++)
{
if (char.IsDigit(text[i]))
{
if ('-'.Equals(text[i - 1]))
{
temp += text[i - 1];
}
temp += text[i];
}
else if (temp.Length > 0)
{
yield return int.Parse(temp);
temp = string.Empty;
}
}
}
通过这种方式,您可以处理字符串中包含多个数字的情况,如@Sir Rufo所示
该行:
text += " ";
当数字位于字符串的最后位置时,确保循环将点击“else if”块,例如“-12在同一天123456”