VB2010环境下:匹配以DD HHMM起止的文本块的正则表达式需求
在VB2010中匹配以DD HHMM开头的文本块的正则方案
我来帮你搞定这个正则匹配需求!首先明确你的核心要求:每个文本块以DD HHMM(两位日期+空格+四位时间)开头,直到下一个DD HHMM出现时结束(最后一个块到文本末尾)。
核心正则表达式
先直接给你能用的正则:
\b\d{2} \d{4}\b(?:(?!\b\d{2} \d{4}\b).)*
正则各部分解释
\b\d{2} \d{4}\b:精准匹配起始的日期时间格式\b是单词边界,避免误匹配类似182134这种连在一起的数字片段\d{2}匹配两位日期数字,空格分隔后\d{4}匹配四位时间数字
(?:(?!\b\d{2} \d{4}\b).)*:匹配文本块的内容直到下一个起始标识(?:...)是非捕获组,不会额外保存分组结果,提升效率(?!\b\d{2} \d{4}\b)是负向预查,确保当前位置之后没有新的DD HHMM起始标识.匹配任意字符(配合单行模式时会包含换行符),*表示重复匹配直到触发预查条件或文本结束
VB2010中的实际使用示例
下面是完整的代码示例,直接复制到VB2010里就能测试:
Imports System.Text.RegularExpressions Module MatchTextBlocks Sub Main() ' 替换成你的实际文本数据 Dim inputText As String = "18 2131 Z50000 ZZ-AAA PR PR AGM TPS P773QQ 1500 DCA 22FEB 21,77,23,M10,F,26,3100,2 OK 18 2134 Z50000 ZZ-AAA PR QU HMKKDBB .DDVZAZC 182134 ARR FI US1500/AN P773QQ/DA KDCA/AD KMIA/IN 2026/FB 152/LA /LR DT DDL DCAV 182134 M33A - OS KMIA /GNO6541/R200RR 18 2134 Z50000 ZZ-AAA PR PR ARR OPN P773QQ 1500 DCA 22FEB 0757 OK 18 2135 Z50000 ZZ-AAA PR PR ARR M58 ..." ' 正则模式 Dim blockPattern As String = "\b\d{2} \d{4}\b(?:(?!\b\d{2} \d{4}\b).)*" ' 使用单行模式,让.匹配换行符(如果你的文本块跨多行的话) Dim regex As New Regex(blockPattern, RegexOptions.Singleline) ' 获取所有匹配的文本块 Dim matches As MatchCollection = regex.Matches(inputText) ' 遍历输出结果 For Each match As Match In matches Console.WriteLine("=== 匹配到的文本块 ===") Console.WriteLine(match.Value) Console.WriteLine("---------------------") Next End Sub End Module
注意事项
- 如果你确定文本块不会跨多行,可以去掉
RegexOptions.Singleline参数,这样.只会匹配非换行字符 - 单词边界
\b很重要,它能防止匹配到类似1234 56789中的34 5678这种不符合格式的片段
内容的提问来源于stack exchange,提问作者sinDizzy
相关产品推荐
相关产品推荐

