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

时间:2013-07-18 02:25:38

标签: .net regex vb.net string environment-variables

我需要扩展字符串中的所有变量以格式化字符串。

例如,如果我有这个字符串:

%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
  

更新2:

完成,但我想知道我是否可以改进我的代码:

Public Function Expand_Variables_In_String(ByVal str As String) As String

    Dim match As System.Text.RegularExpressions.Match = _
    System.Text.RegularExpressions.Regex.Match(str, "(%\w+%)")

    Do While match.Success
        str = str.Replace(match.ToString, Environment.ExpandEnvironmentVariables(match.ToString))
        match = match.NextMatch()
    Loop

    Return str

End Function

1 个答案:

答案 0 :(得分:1)

为什么不替换?

抱歉,我没注意到它是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")