繁体   English   中英

从字符串中提取字符(正则表达式)

[英]Extracting char from string (regex)

我想从下面的示例字符串中提取粗体字符。 模式如下:

ChunkOfAlphabets_ChunkOfDigits_ CharIWant _ChunkOfDigits_CharIDontCare

“ ABC12 A 1234D”

“ ABCD34 B 5678E”

“ EF34 C 9101F”

我想出了以下代码。 似乎工作正常,但我想知道是否有更有效的方法,也许使用正则表达式?

    char extractString(string test)
    {
        bool isDigit = false;
        foreach(var c in test)
        {
            if (isDigit && !char.IsDigit(c))
                return c;

            isDigit = char.IsDigit(c);
        }

        return '0';
    }

如果您使用的是C#LINQ,将会更轻松,性能更高(正则表达式会涉及很多开销):

static char ExtractString(string test)
{
    return test.SkipWhile(c => Char.IsLetter(c))
               .SkipWhile(c => Char.IsDigit(c))
               .FirstOrDefault();

}

首先,一个正则表达式不应该比一个好的算法少的快。 但是,我给你一个正则表达式来尝试一下,并检查什么更快。

以下正则表达式为我提供了您想要的:

^\D+\d+([A-Za-z])\d+\D+$

我建议您使用https://regex101.com/ ,它非常适合测试类似的东西。

使用正则表达式,C#中的此函数应该可以实现您期望的功能,但是我怀疑它比简单的算法更有效:

    using System.Text.RegularExpressions;

    private char extractChar(string test)
    {
        char charOut = '\0';
        var matches = Regex.Matches(test, "^[a-zA-Z]+[0-9]+([a-zA-Z])[0-9]+.+");
        if (matches.Count > 0)
            charOut = matches[0].Groups[1].Value[0];

        return charOut;
    }

假设

ChunkofAlphabets = [A-Za-z] <-英文字母

ChunkOfDigits = [0-9]

CharIWant =可以是除数字[0-9]之外的任何字符

假设以上,正则表达式应为

^[A-Za-z]+\d+(\D+)\d+.*$

正则表达式演示

C#代码Ideone演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM