如何在C#中使用这个正则表达式?

时间:2012-09-10 10:16:53

标签: c# regex

我一直试图这样做很长一段时间但是由于某种原因从来没有做对。

会有这样的文字:

  • 12325 NHGKF
  • 34523 KGJ
  • 29302 MMKSEIE
  • 49504EFDF

规则是在 1 SPACE (或根本没有空格)之后会有完全5位数(不多或少)以及之后的一些文字如上所示。我想使用正则表达式模式进行MATCH并提取数字和空格以及文本

这可能吗?非常感谢你!

4 个答案:

答案 0 :(得分:2)

由于您的措辞似乎需要能够在成功匹配时获得输入文本的每个组成部分,因此这里将为您提供命名组numberspacetext如果正则表达式匹配,您可以轻松获取它们:

(?<number>\d{5})(?<space>\s?)(?<text>\w+)

在返回的Match上,如果Success==true,则可以执行以下操作:

string number = match.Groups["number"].Value;
string text = match.Groups["text"].Value;
bool hadSpace = match.Groups["space"] != null;

答案 1 :(得分:1)

表达式相对简单:

^([0-9]{5}) ?([A-Z]+)$

即5个数字,一个可选空格和一个或多个大写字母。两端的锚点确保整个输入匹配。

数字模式和字母模式周围的括号指定捕获组一和二。访问它们以获取数字和单词。

答案 2 :(得分:1)

string test = "12345 SOMETEXT";
string[] result = Regex.Split(test, @"(\d{5})\s*(\w+)");

答案 3 :(得分:0)

您可以使用Split方法:

public class Program
{
    static void Main()
    {
        var values = new[] 
        { 
            "12325 NHGKF", 
            "34523 KGJ", 
            "29302 MMKSEIE", 
            "49504EFDF" 
        };
        foreach (var value in values)
        {
            var tokens = Regex.Split(value, @"(\d{5})\s*(\w+)");
            Console.WriteLine("key: {0}, value: {1}", tokens[1], tokens[2]);
        }
    }
}