概述VB.NET正则表达式简化程序代码

开发 后端
这里介绍在VB.NET正则表达式必须先引入命名空间System.Text.RegularExpressions,该命名空间包含一下七个类:Regex、Match、MatchCollection、GroupCollection、CaptureCollection、Group、Capture。

经过长时间学习VB.NET正则表达式,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。在通常的程序设计中,对字符串的操作是不可缺少的部分。例如,我们经常需要从字符串中寻找特定的部分,或者对某一部分进行替换、删除等等。使用传统的静态字符串操作方法只能查找字符串中固定不变的部分,缺乏灵活性。而用正则表达式则可以规定待查找字符串的模式,查找同一类型的字符串,例如要在EMAIL格式的字符串(如lzcarl@126.com)中分解出用户名和服务器名,可以定义如下的正则表达式(?<user>[^@]+)@(?<host>.+),然后使用相应的解析器进行解析,得到两个分组user组和host组,user组里存储用户名lzcarl,host组里存放服务器名126.com,而用传统的方法是很难实现这种分解的。由此可见,作为一种字符串处理方式,正则表达式的灵活与强大确实是传统字符串处理方式无法相比的。

1、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中正则表达式的应用。

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

TimeRegex类代码如下:

  1. ImportsSystem.Text.RegularExpressions  
  2. PublicClassTimeRegex  
  3. PrivatehourAsInteger=0 
  4. PrivateminuteAsInteger=0 
  5. PrivatesecondAsInteger=0 
  6. PrivatetotalTimeAsInteger=0 
  7. PrivateexpAsString'时间表达式  
  8.  
  9. SubNew()  
  10. EndSub  
  11.  
  12. '根据时间文本解析出其中的数字部分  
  13. PrivateFunctiongetTime(ByValtimeKindAsString)AsString  
  14. DimtimeMatchAsMatch  
  15. DimtimeAsString  
  16. '先从中解析出包含数字和中文的部分  
  17. timeMatch=Regex.Match(exp,timeKind)  
  18. IftimeMatch.Success=TrueThen 
  19. time=timeMatch.Value  
  20. '然后从得到的文本中解析出数字  
  21. ReturnRegex.Match(time,"[0-9]+").Value  
  22. Else  
  23. Return"0"  
  24. EndIf  
  25. EndFunction  
  26.  
  27. '根据传入的表达式计算总时间  
  28. PublicFunctiongetTotalTime(ByVal_expAsString)AsInteger  
  29. exp=_exp 
  30. '分别计算出小时,分钟,秒,然后得到总时间  
  31. hour=Integer.Parse(getTime("[0-9]+小时"))  
  32. minute=Integer.Parse(getTime("[0-9]+分钟"))  
  33. second=Integer.Parse(getTime("[0-9]+秒"))  
  34. totalTime=hour*3600+minute*60+second  
  35. ReturntotalTime  
  36. EndFunction  
  37. EndClass  
  38.  
  39. Form1类代码如下:  
  40. PublicClassForm1  
  41. InheritsSystem.Windows.Forms.Form  
  42. PrivateregexAsNewTimeRegex  
  43.  
  44. Windows窗体设计器生成代码省略  
  45.  
  46. PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click  
  47. SecondTime.Text=regex.getTotalTime  
  48. (timeExp.Text).ToString&"秒"  
  49. EndSub  
  50. EndClass 

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

【编辑推荐】

  1. VB.NET水印类整合水印技术
  2. 实例讲述VB.NET使用Log4Net
  3. 浅析利用VB.NET启动Smartphone常规方法
  4. 三分钟学会VB.NET转换形态
  5. 自己动手改写VB.NET内存指针
责任编辑:佚名 来源: 赛迪网
相关推荐

2010-01-07 13:29:00

VB.NET正则表达式

2009-10-26 16:12:19

VB.NET正则表达式

2009-10-26 16:01:03

VB.NET正则表达式

2009-10-26 15:33:27

VB.NET正则表达式

2009-10-28 09:02:41

VB.NET开发正则表

2010-01-22 15:09:11

VB.NET下载程序

2009-10-26 16:49:27

VB.NET正则表达式

2009-08-07 14:24:31

.NET正则表达式

2009-08-19 14:48:57

正则表达式性能

2012-05-08 13:29:01

VB

2009-08-07 14:31:40

.NET正则表达式基础

2012-01-12 10:21:57

正则表达式

2018-09-27 15:25:08

正则表达式前端

2010-01-07 15:29:59

VB.NET表达式

2020-09-04 09:16:04

Python正则表达式虚拟机

2009-03-24 08:56:15

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

2009-08-24 17:14:41

正则表达式C#和.NET框架

2010-01-05 17:46:04

.NET Framew

2010-03-25 18:25:36

Python正则表达式

2009-09-16 18:19:34

正则表达式组
点赞
收藏

51CTO技术栈公众号