2015-06-10 209 views
0

我試圖執行一個簡單的正則表達式查找和替換,在一些數字後面添加一個標籤到字符串,如下所述。正則表達式VB.Net正則表達式替換

a/users/12345/badges 

a/users/12345 /badges 

我使用了以下內容:

s = regex.replace(s, "(a\/users\/\d*)("a\/users\/\d*\t)", $1 $2") 

但是我清楚自己做錯事。

我哪裏去錯了,我知道它是一個愚蠢的錯誤,但會受到感激的幫助。

VBVirg

+0

'\ t'不是VB.net中的一個選項卡 - http://stackoverflow.com/questions/1410462/vb-net-identifier-for-tab – TessellatingHeckler

回答

1

可以實現與單純前瞻,將找到的位置最後/前右:

Dim s As String = Regex.Replace("a/users/12345/badges", "(?=/[^/]*$)", vbTab) 

輸出:

a/users/12345 /badges 

IDEONE demo

或者,您可以使用LastIndexOf owith Insert

Dim str2 As String 
Dim str As String = "a/users/12345/badges" 
Dim idx = str.LastIndexOf("/") 
If idx > 0 Then 
    str2 = str.Insert(idx, vbTab) 
End If 
+0

你也許可以拋開正則表達式,只是做一個字符串替換' 「/徽章」'到'vbTab&「/徽章」' – TessellatingHeckler

+0

除非還有其他東西。我現在也添加了另一個非正則表達式解決方案。 @ vbvirg20,你在找什麼? –

+0

或者'Dim s As String =「a/users/12345/badges」.Replace(「/ badges」,vbTab +「/ badges」)'夠了(意思'/ badges'總是一個已知的子串)? –

0

當我讀到,「添加標籤到一些數字之後的字符串」我想可能有不止一組數字可以出現之間的斜槓。這種模式:

"/(\d+)/" 

將捕獲只有那些正斜槓之間,並允許你插入一個標籤,像這樣的數字:

Imports System.Text.RegularExpressions 

Module Module1 
    Sub Main() 
     Dim str As String = "a/54321/us123ers/12345/badges" 
     str = Regex.Replace(str, "/(\d+)/", String.Format("/$1{0}/", vbTab)) 

     Console.WriteLine(str) 
     Console.ReadLine() 
    End Sub 
End Module 

結果(注:該選項卡空格的長度可以變化):

a/54321 /us123ers/12345 /badges 

當字符串是 「一個/ 54321 /用戶/ 12345 /徽章」 結果:

a/54321 /users/12345 /badges