2016-05-17 81 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