VB.NET正则表达式替换

时间:2015-06-21 19:51:39

标签: regex vb.net

我有一个名为flav x (其他文本)的字段列表,从1到10。 例如,我可能有:

flav2PGPct

我需要把它变成

flav12PGPct

我需要使用带有正则表达式的VB.NET 1函数,将10通过11替换为20Replace,但我可以& #39;让它正常工作。

有人可以帮忙吗?

以下是我尝试的内容:

(\.)flav*[1-9]

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

3 个答案:

答案 0 :(得分:0)

使用此正则表达式进行搜索:(flav)(\d\w*)此替换为${1}1$2

答案 1 :(得分:0)

我使用2个正则表达式运行来获得所需的结果,因为无法使用替代文字替换文字。

第一个正则表达式将10替换为20,第二个正则表达式将处理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]*|^)之间不存在空格数字:listenAndPromise

答案 2 :(得分: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