.net 用于查找后缀的正则表达式,但不从右向左捕获

.net 用于查找后缀的正则表达式,但不从右向左捕获,.net,regex,string,.net,Regex,String,我是新手。仅当在右侧找到但未捕获到5位数字时,才尝试从左侧提取值。任何指示都将不胜感激 例如: Hello Industries 12345 我需要找到5位数的数字,然后抓取公司名称。使用,(?=),查找但不捕获它 .+(?=\s+\d{5}) 您可以看到,这个正则表达式使用。使用查找表达式前面出现的某些内容。表达式本身不会被捕获(因此名称为“零宽度”) 这将发现一个单词([a-zA-Z0-9_33;],加上一些)出现在一个5位数字之前 根据您的格式,我猜您有一个以换行符分隔的客户列表,并附

我是新手。仅当在右侧找到但未捕获到5位数字时,才尝试从左侧提取值。任何指示都将不胜感激

例如:

Hello Industries 12345
我需要找到5位数的数字,然后抓取公司名称。

使用,
(?=)
,查找但不捕获它

.+(?=\s+\d{5})
您可以看到,这个正则表达式使用。

使用查找表达式前面出现的某些内容。表达式本身不会被捕获(因此名称为“零宽度”)

这将发现一个单词(
[a-zA-Z0-9_33;]
,加上一些)出现在一个5位数字之前

根据您的格式,我猜您有一个以换行符分隔的客户列表,并附加了客户id。如果是这样,您可以结合使用以下模式来查找特定客户:

^.+(?=\s+12345)
如果您试图从客户名称后跟5位客户ID的文档中提取客户名称,则可以使用以下内容(假设客户名称大写):

这将找到一个或多个以大写、标题或“其他”大小写字符(不包括小写)开头的单词。

使用匹配组

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));
    }
  }
}
使用系统;
使用System.Text.RegularExpressions;
公开课考试
{
公共静态void Main()
{
string test=“Hello Industries 12345另一个54321”;

var matches=Regex.matches(测试,@)(?.NET正则表达式在许多重要方面与Ruby不同。在本例中,代码是相同的,但我不建议为.NET表达式使用Ruby正则表达式开发工具。请使用适合您的工具。您可以在中找到.NET正则表达式测试程序。@Cyborgx37感谢指向其他正则表达式测试程序的链接。我已将链接更改为t使用.NET正则表达式的ool。
([\p{Lu}\p{Lt}\p{Lo}]\w*\s+)+(?=\d{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));
    }
  }
}