簡體   English   中英

VB.NET正則表達式替換

[英]VB.NET Regex Replacement

我有一個名為flav x (其他文本)的字段列表,范圍為1到10。例如,我可能有:

flav2PGPct

我需要把它

flav12PGPct

我需要使用VB.NET的Regex Replace功能將110替換為1120 ,但是我無法正常工作。

有人可以幫忙嗎?

這是我嘗試過的:

(\.)flav*[1-9]

我不知道在替換盒里放什么...

使用此正則表達式進行搜索: (flav)(\\d\\w*)並使用該正則表達式進行替換: ${1}1$2

我將使用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演示 (輸出為flav12PG20Pct101

正則表達式說明

  • (?<=\\D|^) -一個正向后方查找,確保沒有數字( \\D )或字符串的開頭( ^ )...
  • [1-9] -從19一位數字(或在第二個正則表達式中,為10與原義10匹配的數字)
  • (?=\\D|$) -一個正向提前查詢,可確保沒有數字( \\D )或數字后的字符串結尾( $ )。

如果必須檢查字符串中是否存在flav則可以使用稍微不同的后視: (?<=flav\\D*|^) ,或者-如果在flav和數字之間不應出現空格: (?<=flav[^\\d\\s]*|^)

正則表達式最適合使用字符串而不是數字,因此一種簡單的方法是使用正則表達式來獲取要調整的字符串部分,然后將計算出的部分連接到字符串中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM