如何从文本中提取否定符号

时间:2017-11-11 09:02:49

标签: c# linq

下面我有一段代码可以从一段文本中提取数字值。因此,如果我有字符串+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;
    }
}

3 个答案:

答案 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”