新手来了 尝试从左侧提取值,仅当在右侧找到但未捕获到 5 位数字时。任何方向将不胜感激。
例子:
Hello Industries 12345
我需要找到 5 位数字,然后获取公司名称。
使用匹配组。
using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
string test = "Hello Industries 12345 Another One 54321";
var matches = Regex.Matches(test, @"(?<=(\d{5}\s+|^))(?<NAME>.*?)\s+(?<NUMBER>\d{5})");
foreach(Match m in matches)
{
Console.WriteLine(string.Format("Name: {0} #: {1}",
m.Groups["NAME"].Value,
m.Groups["NUMBER"].Value));
}
}
}
使用零宽度正向前瞻断言来查找出现在表达式之前的一些内容。表达式本身不会被捕获(因此名称为“零宽度”)。
(\w+)(?=\s+\d{5})
这将找到一个出现在 5 位数字之前的单词([a-zA-Z0-9_]
加上一些unicode 内容)。
我会根据您的格式猜测您有一个以换行符分隔的客户列表,并附加了客户 ID。如果是这种情况,您可以结合使用以下模式和Multiline 选项来查找特定客户:
^.+(?=\s+12345)
如果您尝试从客户名称后跟 5 位客户 ID 的文档中提取客户名称,则可以使用以下内容(假设客户名称大写):
([\p{Lu}\p{Lt}\p{Lo}]\w*\s+)+(?=\d{5})
这将找到一个或多个以大写、标题大小写或“其他”大小写字符(不包括小写字母)开头的单词。