使用C#从字母数字字符串中拆分数字部分

时间:2013-10-10 06:11:19

标签: c# regex split numeric alphanumeric

我有字母数字字符串列表。 例如:

1A
2B
7K
10A

我想只得到数字部分然后比较它们,如果它小于10我不需要将它添加到另一个列表中。 我想知道正则表达式将数字部分从字符串中分离出来。 任何帮助。 我到现在所做的是:

 if (x == y) // also handles null
            return 0;
        if (x == null)
            return -1;
        if (y == null)
            return +1;

        int ix = 0;
        int iy = 0;
        while (ix < x.Length && iy < y.Length)
        {
            if (Char.IsDigit(x[ix]) && Char.IsDigit(y[iy]))
            {
                // We found numbers, so grab both numbers
                int ix1 = ix++;
                int iy1 = iy++;
                while (ix < x.Length && Char.IsDigit(x[ix]))
                    ix++;
                while (iy < y.Length && Char.IsDigit(y[iy]))
                    iy++;
                string numberFromX = x.Substring(ix1, ix - ix1);
                string numberFromY = y.Substring(iy1, iy - iy1);

                // Pad them with 0's to have the same length
                int maxLength = Math.Max(
                    numberFromX.Length,
                    numberFromY.Length);
                numberFromX = numberFromX.PadLeft(maxLength, '0');
                numberFromY = numberFromY.PadLeft(maxLength, '0');

                int comparison = _CultureInfo
                    .CompareInfo.Compare(numberFromX, numberFromY);
                if (comparison != 0)
                    return comparison;
            }
            else
            {
                int comparison = _CultureInfo
                    .CompareInfo.Compare(x, ix, 1, y, iy, 1);
                if (comparison != 0)
                    return comparison;
                ix++;
                iy++;
            }
        }

但我不想在我的方法中如此复杂。 所以我需要一个正则表达式来分裂。

4 个答案:

答案 0 :(得分:3)

尝试char的IsDigit方法

var number = int.Parse(new string(someString.Where(char.IsDigit).ToArray()));
if(number<10)
{
   someList.Add(number);
}

使用AllIsDigit,您只能取字符串的数字部分,然后将其解析为int并进行比较:)不需要使用Regexes

答案 1 :(得分:1)

你可以试试这个:

  string txt="10A";
  string re1="(\\d+)";  // Integer Number 1

  Regex r = new Regex(re1);
  Match m = r.Match(txt);

答案 2 :(得分:1)

您可以使用以下代码分割输入字符串并获取数字组和字母组的结果。如果不存在一个组,则结果将为空字符串。

string input = "10AAA";
Match m = Regex.Match(input, @"(\d*)(\D*)");

string number = m.Groups[1].Value;
string alpha = m.Groups[2].Value;

答案 3 :(得分:0)

你想这样做吗?

int num;
string stringWithNumbers = "10a";
if (int.TryParse(Regex.Replace(stringWithNumbers, @"[^\d]", ""), out num))
{
    //The number is stored in the "num" variable, which would be 10 in this case.
    if (num >= 10)
    {
        //Do something
    }

}
else
{
    //Nothing numeric i the string
}