0

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

会有这样的文字:

  • 第12325章
  • 34523 公斤
  • 29302 MMKSEIE
  • 49504EFDF

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

这可能吗?非常感谢你!

4

4 回答 4

2

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

(?<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;
于 2012-09-10T10:23:18.957 回答
1

表达式比较简单:

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

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

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

于 2012-09-10T10:20:03.947 回答
1
string test = "12345 SOMETEXT";
string[] result = Regex.Split(test, @"(\d{5})\s*(\w+)");
于 2012-09-10T10:24:04.027 回答
0

您可以使用拆分方法:

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]);
        }
    }
}
于 2012-09-10T10:22:37.253 回答