2015-06-21 61 views
1

我託利命名字段列表X是去1到10 例如(其它文本),我可能有:VB.NET正則表達式替換

flav2PGPct 

我需要把它轉化爲

flav12PGPct 

我需要通過10使用VB.NET的Replace功能用正則表達式替換111通過20,但我不能獲得工作的權利。

任何人都可以幫忙嗎?

這是我已經試過:

(\.)flav*[1-9] 

我不知道在替換框中地方...

+0

對不起如果我不清楚的人,我沒有在代碼中使用它,而是在Visual Studio的搜索和替換框中實際替換代碼。 – Chris

回答

0

使用此正則表達式搜索:(flav)(\d\w*)而這一次的更換:${1}1$2

+0

如何將「10」更改爲「20」? –

+0

它不會匹配10,因爲'\ d'只會匹配一個數字。 – Shlomo

+0

我可以解決它,除非你有另一種解決方案? – Chris

0

我會使用2個正則表達式運行來獲得所需的結果,因爲它是不可能使用替代文字替代。

第一正則表達式將替換1020和第二將處理1至9位:

Dim rx1to9 As Regex = New Regex("(?<=\D|^)[1-9](?=\D|$)") '1 - 9 
Dim rx10 As Regex = New Regex("(?<=\D|^)10(?=\D|$)") '10 
Dim str As String = "flav2PG10Pct101" 
Dim result = rx10.Replace(str, "20") 
result = rx1to9.Replace(result, "1$&") 
Console.WriteLine(result) 

參見IDEONE demo(輸出是flav12PG20Pct101

正則表達式的解釋

  • (?<=\D|^) - 一個積極的後臺臨時工牛逼確保沒有數字(\D)或之前字符串的開始(^)...
  • [1-9] - 從19單個數字(或者,在第二個正則表達式,10匹配字符串10
  • (?=\D|$) - 確保數字後面沒有數字(\D)或字符串結尾($)的積極預測。

如果你一定要檢查是否flav出現在字符串中,你可以使用一個有點不同向後看:(?<=flav\D*|^),或者 - 如果空間不應該flav和數字之間發生:(?<=flav[^\d\s]*|^)

0

的正則表達式與字符串而不是數字效果最好,所以一個簡單的方法是使用正則表達式來得到你想要的調整,然後串聯在字符串中計算出的部分字符串的部分:

Option Strict On 
Option Infer On 

Imports System.Text.RegularExpressions 

Module Module1 

    Sub Main() 
     Dim re As New Regex("^flav([0-9]+)(.*)$") 
     Dim s = "flav1PGPct" 
     Dim t = "" 
     Dim m = re.Match(s) 
     If m.Success Then 
      t = CStr(Integer.Parse(m.Groups(1).Value) + 10) 
      t = "flav" & t & m.Groups(2).Value 
     End If 
     Console.WriteLine(t) 

     Console.ReadLine() 

    End Sub 

End Module