我有一个字符串,我想搜索两组字符。第一个是“in”,第二个是“-in”。搜索的短语是“in-in”。我想用 8888 替换“in”,用 9999 替换“-in”,但我无法弄清楚如何不匹配最后的“in”部分。< / p>
这个字符串实际上是两个子串,一个是“in”,另一个是“-in”。我尝试过使用string.Split,但这没有用。
关于.NET正则表达式的任何想法/方向如果有可能最终得到字符串 88889999 基于替换in和-in?现在,我似乎得到的只是 8888-8888
答案 0 :(得分:1)
您可以使用lookaround assertions执行此操作:
(?<!-)\bin\b
仅在in
之前没有匹配-
。
-in\b
匹配-in
。
word boundary anchors确保您不会意外地匹配bins
,into
或gain
。
解决方案:
Sub TestRegExSubstition()
Dim searchDictionary As New List(Of KeyValuePair(Of String, String))
searchDictionary.Add(New KeyValuePair(Of String, String)("in", "8888"))
searchDictionary.Add(New KeyValuePair(Of String, String)("-in", "9999"))
Dim sentenceArray = {"in-in",
"in Parvin-e",
"Parvin-in",
"in in-e",
"Parvin injā-in"}
For i = 0 To UBound(sentenceArray)
Dim input As String = sentenceArray(i)
For Each kvp In searchDictionary
Dim regex As Regex = New Regex("(?<!-)\b" + kvp.Key + "\b")
input = regex.Replace(input, kvp.Value)
Next
Console.WriteLine(input)
Next
Console.ReadLine()
End Sub
答案 1 :(得分:0)
如果您的替换集不是无前缀的,那么您可能需要考虑在较短的替换之前执行更长的替换。在这种情况下,您首先要将"-in"
替换为"9999"
,然后将"in"
替换为"8888"
。
答案 2 :(得分:0)
如果表达式严格总是在in-in中,为什么不使用正则表达式的MatchCollection? “(in)( - in)”,会让你得到Match [1] = in和Match [2] = -in,你可以相应地替换它们
答案 3 :(得分:0)
基本上你想做以下事项:
1.如果找到,首先在字符串“str”中搜索“in”,替换为“8888”
2.如果找到,则在字符串“str”中搜索“-in”,替换为9999“。
您的问题有两种解决方案:
案例1:您首先要知道您要搜索“searchString1”和“searchString2”
解决方案:在这种情况下,按照从最大字符串到最小字符串的长度顺序排序字符串,然后依次替换
案例2:您首先不知道要搜索的第二个字符串是什么(从您的评论看起来就是这种情况)。
解决方案:首先形成一个KEYWORD,它不存在于“inputString”中,用KEYWORD替换“searchString1”,然后搜索“searchString2或-KEYWORD”,替换为第二个替换字符串,最后用第一个替换字符串替换KEYWORD