.net 展开字符串中的所有环境变量(格式字符串)

.net 展开字符串中的所有环境变量(格式字符串),.net,regex,vb.net,string,environment-variables,.net,Regex,Vb.net,String,Environment Variables,我需要展开字符串中的所有变量来格式化字符串 Dim str As String = "%homedrive%\bla\%username%\bla\%computername%\%chars%\bla" ' MsgBox(Expand_Variables(str)) Private Function Expand_Variables(ByVal str As String) As String Dim TempStr As String = String.Empty Dim

我需要展开字符串中的所有变量来格式化字符串

Dim str As String = "%homedrive%\bla\%username%\bla\%computername%\%chars%\bla"
' MsgBox(Expand_Variables(str))

Private Function Expand_Variables(ByVal str As String) As String

    Dim TempStr As String = String.Empty

    Dim match As System.Text.RegularExpressions.Match = System.Text.RegularExpressions.Regex.Match(str, <a><![CDATA[(%\w+%)]]></a>.Value)

    Do While match.Success
        TempStr &= Environment.ExpandEnvironmentVariables(match.NextMatch().ToString)
    Loop

    Return TempStr

End Function
例如,如果我有以下字符串:

%homedrive%\blabla\%Username%\blabla\%computername%\%PercentCharacters%blabla
我想格式化字符串以获得以下内容:

X:\blabla\MyUsername\blabla\MyComputername\%PercentCharacters%blabla
我知道如何展开变量,但在这种情况下,哪种方法更好?可能需要一个正则表达式组来匹配所有的%vars%,并检查匹配的是真实的var还是百分比字符?怎么做

有人能给我举个例子吗

更新:

这就是我的意图,我能够扩展真实环境变量,保留非真实的变量,但我在尝试检测同一组中的“\bla\”部分以将它们附加到字符串时遇到了麻烦

Dim str As String = "%homedrive%\bla\%username%\bla\%computername%\%chars%\bla"
' MsgBox(Expand_Variables(str))

Private Function Expand_Variables(ByVal str As String) As String

    Dim TempStr As String = String.Empty

    Dim match As System.Text.RegularExpressions.Match = System.Text.RegularExpressions.Regex.Match(str, <a><![CDATA[(%\w+%)]]></a>.Value)

    Do While match.Success
        TempStr &= Environment.ExpandEnvironmentVariables(match.NextMatch().ToString)
    Loop

    Return TempStr

End Function
为什么不更换

对不起,我没有注意到它是VB.Net。我最初的答案是C#,我已经多年没有使用VB了,但下面是VB的代码

Dim strpath as String
strpath = "%homedrive%\blabla\%Username%\blabla\%computername%\%PercentCharacters%blabla"
strpath.Replace("%homedrive%","X:").Replace("%Username%","blabla").Replace("%computername%","MyComputerName")

谢谢,但是代码对我没有帮助。“为什么不替换?”:如果我尝试替换一个“非真实”变量,那么您的建议将失败,而且系统可以由用户添加自定义环境变量,而且我真的不想在字符串中附加35个默认Windows环境变量的.replace函数x35次(不适用于懒惰的东西)即使对于新手程序员,使用您的代码建议也太不正确了,我需要一种改进的方法来使用regex(例如),但无论如何,谢谢。如果您不使用regex,那么instr和mid in a loop也可以工作,谢谢,但这与使用replace差不多,也就是VB6函数,不是本机vb.net。抱歉,我需要记住您,我正在寻找一种改进的方法来实现这一点,而不是使用千次替换(或左、中)或引用/导入Microsoft.VisualBasic6库来使用过时的函数和/或在字符串上执行循环。