2016-05-17 73 views

回答

0

正则表达式可能是矫枉过正的。 相反,为什么不只是从原始字符串中取出一个子串。

Dim data As String = "Doctor : JOHN A. BROWN" 
Dim name As String = data.Substring(data.IndexOf(":") + 2) 

注意,做“+ 2”的子字符串的开始索引跳过“了之后出现”的“:”。

+0

为什么在op要求显式提供正则表达式时提供子字符串解决方案? – PhilDulac

+1

考虑到正则表达式比直接字符串操作(在互联网上多次证明)慢的事实,在这种情况下,需要更多的内存分配(几乎没有,但仍然:))。而且,由于知道大量的人会发布足够多的正则表达式解决方案,考虑到手头任务的简单性,我认为使用纯字符串操作提供替代解决方案并不会有什么坏处。 – RoyalPotato

2

说明

(?<=:\s).* 

Regular expression visualization

这个正则表达式将执行以下操作:

  • 发现第一个冒号后面有一个空格后所有的子

例子

直播例

https://regex101.com/r/oH4wK1/1

示例文本

Doctor : JOHN A. BROWN 

返回匹配

[0] => JOHN A. BROWN 

说明

NODE      EXPLANATION 
---------------------------------------------------------------------- 
    (?<=      look behind to see if there is: 
---------------------------------------------------------------------- 
    :      ':' 
---------------------------------------------------------------------- 
    \s      whitespace (\n, \r, \t, \f, and " ") 
---------------------------------------------------------------------- 
)      end of look-behind 
---------------------------------------------------------------------- 
    .*      any character except \n (0 or more times 
          (matching the most amount possible)) 
---------------------------------------------------------------------- 
0

可以执行:

:\s+(.*) 
  • :\s+匹配之后是一个或多个空格

  • (.*)之后即期望部分进入拍摄组1匹配任何: 。现在,\1将是JOHN A. BROWN

Demo

0

如何:

^Doctor\s*:\s*(.*) 

这将排除 “医生:” 字段和匹配冒号后什么。

+0

这不会排除“医生:”部分,它将包括它!它只会在你使用lookbehind'(?<= [expression])'检查时排除它。它也是一个普通的冒号(':'),分号就是这些:';'。 :) –

+0

@VisualVincent感谢vincent,意识到我的错误。仍在学习。干杯。 :) – Josh