我有字母数字字符串列表。 例如:
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++;
}
}
但我不想在我的方法中如此复杂。 所以我需要一个正则表达式来分裂。
答案 0 :(得分:3)
尝试char的IsDigit方法
var number = int.Parse(new string(someString.Where(char.IsDigit).ToArray()));
if(number<10)
{
someList.Add(number);
}
使用All
和IsDigit
,您只能取字符串的数字部分,然后将其解析为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
}