繁体   English   中英

正则表达式和VB.net模式匹配

[英]Regex and VB.net pattern matching

我正在编写一个VB.net程序来检测单词。 这是我的示例文本文件:

EXTERNAL 16EVP_PK   -- FL(4) TDC PERMIT CONTRL TO MESTO CONTRL  
                    -- FL(5) $HY04B09.BOXTSTAT (= RUN = ON)   
EXTERNAL 16EVPUPK   -- FL(33) REQUEST FROM METSO FOR CONTRL   
EXTERNAL 16SA0541                                 -- SP VALUES TRANSFERS  
EXTERNAL 16FC0730, 16FC0815, 16FC0830   -- Hiway 4 Tags   
EXTERNAL 16FC1525                       -- Hiway 4 Tags

我想检测EXTERNAL之后和之前的所有内容- (EXTERNAL可以是外部的,也可以是ExTernal或任何组合)。 第一场比赛应显示为“ 16EVP_PK”,第二场比赛应为“ 16EVPUPK”,第三场比赛应为“ 16SA0541”,第四场比赛应为“ 16FC0730、16FC0815、16FC0830”,依此类推

这是我编写的代码:

Private Sub CheckCLFile()
path="D:\16METEVP.CL"
'Read CL file
Dim value As String = System.IO.File.ReadAllText(path)
Dim Pattern As String = "(?m)(?<=\bExternal).*$"
Debug.WriteLine(value)
Debug.WriteLine(Regex.Matches(value, Pattern).Count())
For Each m As Match In Regex.Matches(value, Pattern)
Console.WriteLine("'{0}' found at index {1}.",
                          m.Value, m.Index)
Next
End Sub

提前致谢。

试试这个正则表达式:

(?<=EXTERNAL)\\s*.*?(?=\\s*--)

有了这个,您将在每场比赛之前获得额外的领先空格。 我猜想,您可以在使用火柴之前轻松修剪一下。

点击演示

说明:

  • (?<=EXTERNAL) -向后查找正数,以找到紧接在EXTERNAL之前的位置。 Ignore Case标志打开。
  • \\s* -尽可能匹配0+次出现的空格
  • .*? -这是您的实际比赛。 它匹配0+次出现的除换行符以外的任何字符,并且尽可能少
  • (?=\\s*--) -正向超前以确认匹配项后必须跟0+空格,再跟--

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM