我一直在尝试这样做很长一段时间,但由于某种原因从来没有做对。
会有这样的文字:
- 第12325章
- 34523 公斤
- 29302 MMKSEIE
- 49504EFDF
规则是,在1 个空格(或根本没有空格)之后会有5 位数字(不多或少),后面会有一些文本,如上所示。我想使用正则表达式模式进行 MATCH 并提取THE NUMBER 和 SPACE 和 THE TEXT。
这可能吗?非常感谢你!
由于从您的措辞看来,您似乎需要能够在成功匹配时获得输入文本的每个组成部分,那么这里有一个将为您提供命名的 groups number
,因此如果正则表达式匹配space
,text
您可以轻松获得它们:
(?<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;
表达式比较简单:
^([0-9]{5}) ?([A-Z]+)$
即 5 位数字、一个可选空格和一个或多个大写字母。两端的anchors确保整个输入匹配。
数字模式和字母模式周围的括号指定捕获组一和二。访问它们以获取数字和单词。
string test = "12345 SOMETEXT";
string[] result = Regex.Split(test, @"(\d{5})\s*(\w+)");
您可以使用拆分方法:
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]);
}
}
}