【问题标题】:Expand all environment variables in string (Format string)展开字符串中的所有环境变量(格式化字符串)
【发布时间】:2013-07-18 02:25:38
【问题描述】:

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

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

%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

【问题讨论】:

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


    【解决方案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")
    

    【讨论】:

    • 谢谢,但代码对我没有帮助。 “为什么不替换?”:如果我尝试替换“非真实”变量,那么您的建议将失败,系统也可以有用户添加的自定义环境变量,而且我真的不想附加到为 35 个默认的 Windows 环境变量字符串 .replace 函数 x35 次(不适用于懒惰的事情)即使对于新手程序员,使用您的代码建议也太不正确了,我需要一种改进的方法来使用正则表达式来做到这一点(例如)但无论如何,谢谢。
    • 如果你不使用正则表达式,那么 instr 和 mid 在一个循环中就可以工作
    • 再次感谢,但这或多或少与使用替换相同,也是 VB6 函数,而不是原生 vb.net。抱歉,我需要记住您,我正在寻找一种改进的方法来执行此操作,而不是使用千次替换(或左、中)或引用/导入 Microsoft.VisualBasic6 库以使用过时的函数和/或进行循环字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多