2

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

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

4 回答 4

3

试试 char 的 IsDigit 方法

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

使用All并且IsDigit您只能获取字符串的数字部分,然后将其解析为 int 并进行比较:) 无需使用正则表达式

于 2013-10-10T06:14:30.327 回答
2

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

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

string number = m.Groups[1].Value;
string alpha = m.Groups[2].Value;
于 2013-10-10T06:19:27.257 回答
1

你可以试试这个:

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

  Regex r = new Regex(re1);
  Match m = r.Match(txt);
于 2013-10-10T06:15:26.673 回答
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
}
于 2013-10-10T06:23:10.557 回答