C# 如何从字符串中获取第一组字母字符?

C# 如何从字符串中获取第一组字母字符?,c#,regex,split,C#,Regex,Split,如果我有一个字符串,我如何从字符串中提取第一个字母字符,这样我就可以得到起始字母字符或空字符串。例如: AB12 9HG => "AB" PJ11 => "PJ" 123JO => "" 这在正则表达式中是可能的还是有更简单的方法?您可以使用LINQ生成结果: new String(s.TakeWhile(p => Char.IsLetter(p)).ToArray()); 基本上,只需要从开始到第一个非字母字符的字符 如果有前导空格,请先修剪字符串。您可以使用LIN

如果我有一个字符串,我如何从字符串中提取第一个字母字符,这样我就可以得到起始字母字符或空字符串。例如:

AB12 9HG => "AB"
PJ11 => "PJ"
123JO => ""

这在正则表达式中是可能的还是有更简单的方法?

您可以使用LINQ生成结果:

new String(s.TakeWhile(p => Char.IsLetter(p)).ToArray());
基本上,只需要从开始到第一个非字母字符的字符


如果有前导空格,请先修剪字符串。

您可以使用LINQ生成结果:

new String(s.TakeWhile(p => Char.IsLetter(p)).ToArray());
基本上,只需要从开始到第一个非字母字符的字符


如果有前导空格,请先修剪字符串。

可能是这样的:

^([A-Za-z])*
private HashSet<char> _alphas = new HashSet<char>("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");

可能是这样的:

^([A-Za-z])*
private HashSet<char> _alphas = new HashSet<char>("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");

正则表达式非常简单。只需使用^定位,然后将零个或多个字符与您想要的字符中的*匹配[A-Za-z]

输出

AB12 9HG=>AB

PJ11=>PJ

123JO=>


正则表达式非常简单。只需使用^定位,然后将零个或多个字符与您想要的字符中的*匹配[A-Za-z]

输出

AB12 9HG=>AB

PJ11=>PJ

123JO=>

下面是一个例子:

这将产生:

检查:ASD123,发现:ASD

检查:PJ11,发现:PJ

正在检查:123JO,找到:

下面是一个例子:

这将产生:

检查:ASD123,发现:ASD

检查:PJ11,发现:PJ

正在检查:123JO,找到:


下面是另一种LINQ方法,让您定义一个whie接受字符列表。创建一个哈希集,如下所示:

^([A-Za-z])*
private HashSet<char> _alphas = new HashSet<char>("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");

下面是另一种LINQ方法,让您定义一个whie接受字符列表。创建一个哈希集,如下所示:

^([A-Za-z])*
private HashSet<char> _alphas = new HashSet<char>("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
我使用的是一个可移植类库,因此无法访问字符串上的TakeWhile方法,或者无法看到

因此,我扩展了Wiktors answer的想法,并为我的字符串提出了一个扩展方法:

public static class StringExtensions
{
    public static string GetStartChars(this string s)
    {
        var result = string.Empty;
        if (!string.IsNullOrEmpty(s))
        {
            s = s.TrimStart();
            foreach (var letter in s.ToCharArray())
            {
                if (char.IsLetter(letter))
                {
                    result += letter;
                }
                else
                {
                    break;
                }
            }
        }
        return result;
    }
}
像这样使用它:

var startChars = "AB11".GetStartChars();
我使用的是一个可移植类库,因此无法访问字符串上的TakeWhile方法,或者无法看到

因此,我扩展了Wiktors answer的想法,并为我的字符串提出了一个扩展方法:

public static class StringExtensions
{
    public static string GetStartChars(this string s)
    {
        var result = string.Empty;
        if (!string.IsNullOrEmpty(s))
        {
            s = s.TrimStart();
            foreach (var letter in s.ToCharArray())
            {
                if (char.IsLetter(letter))
                {
                    result += letter;
                }
                else
                {
                    break;
                }
            }
        }
        return result;
    }
}
像这样使用它:

var startChars = "AB11".GetStartChars();

看。顺便说一句,获取首字母的正则表达式是@^\p{L}*,但是在这里,你可以使用非正则表达式的方法得到你需要的-除非你只想限制到某些特定的脚本。很好,一些微优化:你可以使用TrimStart而不是Trim,你可以使用s.TakeWhileChar.isleter是的,TrimStart看起来更合适。请参阅。顺便说一句,获取首字母的正则表达式是@^\p{L}*,但是在这里,你可以用非正则表达式的方法得到你所需要的-除非你只想限制到某些特定的脚本。很好,一些微优化:你可以使用TrimStart而不是Trim,你可以使用s.TakeWhileChar.isleter是的,TrimStart看起来更合适。