VB.NET正则表达式应用经验分享

开发 后端
VB.NET正则表达式在使用的过程中,首先要做的就是对特定命名空间进行引入,这一命名空间叫做:System.Text.RegularExpressions。

作为一个优秀的程序员来说,掌握一两门编程语言并不算什么。而能够把所掌握的语言达到一种熟练运用的地步就是一个相当的难的高度了。对于VB.NET的学习同样也是需要我们循序渐进的慢慢积累经验才能达到自己预期的目标。先来了解一下VB.NET正则表达式的相关介绍吧。#t#

1、引言

在通常的程序设计中,对字符串的操作是不可缺少的部分。例如,我们经常需要从字符串中寻找特定的部分,或者对某一部分进行替换、删除等等。使用传统的静态字符串操作方法只能查找字符串中固定不变的部分,缺乏灵活性。而用VB.NET正则表达式则可以规定待查找字符串的模式,查找同一类型的字符串,例如要在EMAIL格式的字符串(如lzcarl@126.com)中分解出用户名和服务器名,可以定义如下的正则表达式(?<user>[^@]+)@(?<host>.+),然后使用相应的解析器进行解析,得到两个分组user组和host组,user组里存储用户名lzcarl,host组里存放服务器名126.com,而用传统的方法是很难实现这种分解的。

由此可见,作为一种字符串处理方式,正则表达式的灵活与强大确实是传统字符串处理方式无法相比的。

 

2、VB.NET正则表达式处理类

在VB.NET中使用正则表达式必须先引入命名空间System.Text.RegularExpressions,该命名空间包含一下七个类:Regex、Match、MatchCollection、GroupCollection、CaptureCollection、Group、Capture。

Regex类表示不可变(只读)正则表达式类,设置待匹配字符串的模式。Match 类表示正则表达式匹配操作的结果。MatchCollection 类表示成功的非重叠匹配的序列,即匹配后得到的字符串集合。在正则表达式中应用最多的就是这三个类。

使用正则表达式类的通用方法是:

首先生成一个Regex类的实例,并在传入参数中输入正则表达式的模式,然后使用Regex类的相应方法,如IsMatch(判断是否
匹配)、Match(返回匹配得到的字符串)等等。

当然也可以使用Regex类的共享方法而不实例化Regex类——IsMatch、Match等等(即上述方法的共享版本)获得所需要的结果。这种方法适于匹配模式不固定,匹配次数不多的情况。

接下来给出一个VB.NET正则表达式的应用。

 

3、时间解析程序

该程序读取用户输入的时间长度字符串(如XX小时XX分钟XX秒),把它解析,***用秒表示该时间长度(XX秒)。

当用户在文本框中输入时间值后,点计算后就会在“结果”后面得到用秒表示的时间值。

该程序首先从文本框中读入时间值,然后分别查找其中的小时、分钟、秒部分,在这里就使用了正则表达式对时间表达式进行解析。如小时数的正则表达式可表示为“[0-9]+小时”。“[0-9]”表示0到9间的任意数字都可以被匹配,“+”表示该字符可以出现一次或更多,因此“[0-9]+”即可以匹配任意长度整数(关于正则表达式的语法可以参见MSDN的相应部分),用这个字符串模式就可以查找出表达式中的小时部分。在分别匹配得到小时数、分钟数和秒数后计算得到总的秒数,并显示在“结果”后面。

程序包括一个计算时间的正则表达式工具类TimeRegex,及Form1界面类。

TimeRegex类代码如下:

 

  1. Imports System.Text.RegularExpressions  
  2. Public Class TimeRegex  
  3. Private hour As Integer = 0 
  4. Private minute As Integer = 0 
  5. Private second As Integer = 0 
  6. Private totalTime As Integer = 0 
  7. Private exp As String '时间表达式  
  8. Sub New()  
  9. End Sub  
  10. '根据时间文本解析出其中的数字部分  
  11. Private Function getTime(ByVal 
    timeKind As String) As String  
  12. Dim timeMatch As Match  
  13. Dim time As String  
  14. '先从中解析出包含数字和中文的部分  
  15. timeMatch = Regex.Match(exp, timeKind)  
  16. If timeMatch.Success = True Then  
  17. time = timeMatch.Value  
  18. '然后从得到的文本中解析出数字  
  19. Return Regex.Match(time, "[0-9]+").Value  
  20. Else  
  21. Return "0"  
  22. End If  
  23. End Function  
  24. '根据传入的表达式计算总时间  
  25. Public Function getTotalTime(ByVal 
    _exp As String) As Integer  
  26. exp = _exp 
  27. '分别计算出小时,分钟,秒,然后得到总时间  
  28. hour = Integer.Parse(getTime("[0-9]+小时"))  
  29. minute = Integer.Parse(getTime("[0-9]+分钟"))  
  30. second = Integer.Parse(getTime("[0-9]+秒"))  
  31. totalTime = hour * 3600 + minute * 60 + second  
  32. Return totalTime  
  33. End Function  
  34. End Class  
  35. Form1类代码如下:  
  36. Public Class Form1  
  37. Inherits System.Windows.Forms.Form  
  38. Private regex As New TimeRegex 

 

 

Windows窗体设计器生成代码省略

 

 

  1. Private Sub Button1_Click
    (ByVal sender As System.Object, 
    ByVal e As System.EventArgs) 
    Handles Button1.Click  
  2. SecondTime.Text = regex.
    getTotalTime  
  3. (timeExp.Text).ToString & "秒"  
  4. End Sub  
  5. End Class 

 

用户输入1小时1分钟1秒后点计算,得到结果3661秒,证明结果正确。

 

4、结论

合理的使用VB.NET正则表达式对于简化程序代码、提高程序的复用性与健壮性有着很大的帮助。可以说正则表达式是程序员必须掌握的几种武器之一。而.NET中对正则表达式也有较好的支持,以后在处理字符串的时候,不妨使用一下正则表达式,一定可以起到事半功倍的效果。

责任编辑:曹凯 来源: 博客园
相关推荐

2009-10-26 16:01:03

VB.NET正则表达式

2010-01-07 15:29:59

VB.NET表达式

2009-10-26 16:12:19

VB.NET正则表达式

2009-10-26 15:33:27

VB.NET正则表达式

2009-10-27 10:14:54

VB.NET正则表达式

2009-10-28 09:02:41

VB.NET开发正则表

2009-10-26 16:49:27

VB.NET正则表达式

2010-01-12 17:02:54

VB.NET文件上传

2009-03-24 08:56:15

正则表达式格式清理字符串

2024-09-14 09:18:14

Python正则表达式

2009-08-07 14:24:31

.NET正则表达式

2012-05-08 13:29:01

VB

2011-07-11 12:33:30

JAVA

2012-01-12 10:21:57

正则表达式

2009-08-07 14:31:40

.NET正则表达式基础

2009-08-27 15:45:30

C#正则表达式

2018-09-27 15:25:08

正则表达式前端

2010-01-14 18:14:22

VB.NET开发特点

2020-09-04 09:16:04

Python正则表达式虚拟机

2010-01-14 17:33:47

VB.NET重载事件处
点赞
收藏

51CTO技术栈公众号