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

时间:2017-11-23 02:49:32

标签: regex vb.net

我正在编写一个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

提前致谢。

1 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

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

有了这个,你将在每场比赛前获得额外的领先空间。我想,你可以在使用比赛之前轻松修剪它。

Click for Demo

<强>解释

  • (?<=EXTERNAL) - 找到紧靠EXTERNAL之前的位置的正面观察。切换Ignore Case标志为ON。
  • \s* - 尽可能多地匹配0 +出现的空格
  • .*? - 这是你的实际比赛。它匹配任何字符的0 +次出现,但是尽可能少的是新行字符
  • (?=\s*--) - 确认匹配必须后跟0+空格后跟--
  • 的正面预测