用于提取数字和非数字字符串的正则表达式替代方法

时间:2018-07-31 12:56:47

标签: c# regex linq logic alphanumeric

使用下面的表达式,我能够获得预期的输出并提取数字或字符串并拆分为字符串数组。

Regex _re = new Regex(@"(?<=\D)(?=\d)|(?<=\d)(?=\D)", RegexOptions.Compiled);

_re.Split("2323dfdf233fgfgfg ddfdf334").Dump();  //string can be any alphanumeric start with

不使用Regex如何实现相同的目的?我需要解析每个字符并分开吗?我有很多文本需要处理以提取出来,但是我不能使用正则表达式作为输入。

2 个答案:

答案 0 :(得分:2)

对于Linq解决方案,可以在检查Enumerable.Skip()以确定字符是否为数字的同时结合使用Enumerable.TakeWhile()char.IsDigit()。例如:

string inputString = "2323dfdf233fgfgfg ddfdf334";
var list = new List<string>();

int usedLength = 0;
while (usedLength < inputString.Length)
{
    bool isDigit = char.IsDigit(inputString[usedLength]);
    string item = string.Concat(inputString.Skip(usedLength).
                                            TakeWhile((c) => char.IsDigit(c) == isDigit));
    usedLength += item.Length;
    list.Add(item);
};

然后,您可以轻松地遍历列表:

foreach (string item in list)
    Console.WriteLine(item);

输出:

2323
dfdf
233
fgfgfg ddfdf
334

答案 1 :(得分:1)

此解决方案足够快。检查较大的字符串。

Auth::guard('api')->login($user)