[英]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.