Regex 正则表达式如果匹配,则替换
我环顾四周试图找到这个问题的答案,但我找不到确切的答案。似乎应该有一种方法来决定是否存在匹配和替换,否则就不需要重复匹配而执行其他操作 我试图确定测试字符串是否包含以Regex 正则表达式如果匹配,则替换,regex,vb.net,Regex,Vb.net,我环顾四周试图找到这个问题的答案,但我找不到确切的答案。似乎应该有一种方法来决定是否存在匹配和替换,否则就不需要重复匹配而执行其他操作 我试图确定测试字符串是否包含以 </body></html> 并在这些标记前面直接插入一些文本。当然,这两个标记之间可能有空格/回车符/换行符的组合,因此我尝试使用Regex。但是,测试字符串可能只是纯文本,如果正则表达式匹配失败,我将只将文本附加到字符串的末尾。当然,我可能会让这变得比实际情况更困难 我没有任何代码可以在这里显示,
</body></html>
并在这些标记前面直接插入一些文本。当然,这两个标记之间可能有空格/回车符/换行符的组合,因此我尝试使用Regex。但是,测试字符串可能只是纯文本,如果正则表达式匹配失败,我将只将文本附加到字符串的末尾。当然,我可能会让这变得比实际情况更困难
我没有任何代码可以在这里显示,因为我不知道在.NET Regex实现中是否可以做到这一点,但这里有一些psudo代码显示了我想做的事情:
Dim testString As String = some file contents
Dim reg As New Regex("(<\/body>\s*<\/html>)", RegexOptions.IgnoreCase)
Dim rMatch As Match = reg.Match(testString)
If rMatch.Success Then
rMatch.Replace(newString)
Else
testString &= alternateNewString
End If
Dim testString As String=一些文件内容
Dim reg作为新正则表达式(“(\s*)”,RegexOptions.IgnoreCase)
Dim rMatch As Match=reg.Match(测试字符串)
如果成功,那么
rMatch.Replace(新闻字符串)
其他的
testString&=alternateNewString
如果结束
当然,我需要将end body和end html标记放入newString中以正确关闭文档,但这应该没有问题。我似乎无法实现的部分是在不需要再次运行正则表达式的情况下进行匹配替换。似乎调用match来确定它是否匹配,然后调用replace使它运行两次。再说一次,我可能想得太多了,或者过早地优化了。你觉得怎么样 如果我理解正确,你是在尝试这样做(这不是很好,见下文): 其中:
表示第一组,基本上是$1
和
之间有任意数量的空格字符
函数中的最后一个参数是应替换的最大匹配字符串数。将其设置为Replace
,以防止在结束标记和字符串结尾之前插入文本1
希望这能有所帮助:)我在正则表达式方面的技能有所欠缺,但这已经开始有意义了。感谢您抽出时间整理此回复。看起来正是我需要的!
Dim testString As String = "Your original string"
Dim newStr As String = String.Empty
Dim textToInsert As String = "Your text to 'inject'"
Dim reg As New Regex("<\/body>\s*<\/html>", RegexOptions.IgnoreCase)
newStr = reg.Replace(testString, textToInsert & Environment.NewLine & "</body></html>")
If newStr = testString Then
newStr = testString & Environment.NewLine & textToInsert
End If
Dim testString As String = "Your original string"
Dim newStr As String = String.Empty
Dim textToInsert As String = "Your text to 'inject'"
Dim reg As New Regex("\s*(<\/body>\s*<\/html>)|$", RegexOptions.IgnoreCase)
newStr = reg.Replace(testString, Environment.NewLine & textToInsert &
Environment.NewLine & "$1", 1)