正则表达式提取3到8位数字和3个字母的文本大写字母之间的数据

问题描述

我想使用正则表达式提取3到8位数字和3个字母的文本(大写字母)之间的数据。任何想法都会非常感谢。

数据(是字符串)

“ 06/29/20 B QM 02004946测试房抵押TRU

03/10/20 B BC 2440720 BK的测试XPN

03/07/20 B QZ 00060298 CPORT RU TRU”

输出应为:测试房屋抵押贷款,BK of Test和CPORT RU

解决方法

也许是

  • 零宽度正向后看
  • 零宽正前瞻

更新

var pattern = @"(?<=\d{3,8}\s).*(?=\s[A-Z]{3})";

var input = @"06/29/20 B QM 02004946 MY HELLO WORLD XLS
08/29/20 B QM 0948264 MY UI PATH LMN
08/29/20 B QM 435 MY SAMPLE DATA LMN
06/29/20 B QM 123 MY HELLO WORLD XLS";

var results = Regex
       .Matches(input,pattern,RegexOptions.Multiline)
       .Cast<Match>()
       .Select(x => x.Value);

Console.WriteLine(string.Join(",",results));

输出

MY HELLO WORLD,MY UI PATH,MY SAMPLE DATA,MY HELLO WORLD

Full Demo Here


原始

模式

(?<=\d{3,8}\s).*(?=\s[A-Z]{3}$)

用法

var pattern = @"(?<=\d{3,8}\s).*(?=\s[A-Z]{3}$)";

var strings = new List<string>()
{
   "06/29/20 B QM 02004946 MY HELLO WORLD XLS","08/29/20 B QM 0948264 MY UI PATH  LMN","08/29/20 B QM 435 MY SAMPLE DATA   LMN"
};

var results = strings.Select(x => Regex.Match(x,pattern).Value);

foreach (var result in results)
   Console.WriteLine(result);

输出

MY HELLO WORLD
MY UI PATH
MY SAMPLE DATA

Full Demo here