Split numeric part from alphanumeric string using C#

旧巷老猫 提交于 2019-12-11 07:51:11

问题


I have alphanumeric string list. For example:

1A
2B
7K
10A

I want to get only the numeric part and then compare them, if it is less than 10 I need not to add it in another list. What I want to know the regex to split the numeric part from the string. Any help. What I have done till now is:

 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++;
            }
        }

But I don't want to be so complex in my approach. So I need a regex to split.


回答1:


Try IsDigit method of char

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

using All and IsDigit you can take only numeric part of the string, then parse it to int and compare :) There is no need to use Regexes




回答2:


You can use the code below to split an input string and get the result of number group and alpha group. If one group is not there, the result will be empty string.

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

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



回答3:


you can try it with this one:

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

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



回答4:


Are you trying to do this?

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
}


来源:https://stackoverflow.com/questions/19288312/split-numeric-part-from-alphanumeric-string-using-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!