我有一个名为flav x (其他文本)的字段列表,从1到10。 例如,我可能有:
flav2PGPct
我需要把它变成
flav12PGPct
我需要使用带有正则表达式的VB.NET 1
函数,将10
通过11
替换为20
到Replace
,但我可以& #39;让它正常工作。
有人可以帮忙吗?
以下是我尝试的内容:
(\.)flav*[1-9]
我不知道在替换盒子里放什么......
答案 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]
- 从1
到9
的单个数字(或者,在第二个正则表达式中,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