0

文字列をフォーマットするには、文字列内のすべての変数を展開する必要があります。

たとえば、次の文字列がある場合:

%homedrive%\blabla\%Username%\blabla\%computername%\%PercentCharacters%blabla

これを取得するために文字列をフォーマットしたい:

X:\blabla\MyUsername\blabla\MyComputername\%PercentCharacters%blabla

変数を拡張する方法は知っていますが、この場合、どの方法を改善すればよいでしょうか? おそらく正規表現グループを使用して、すべての %vars% に一致し、一致が実際の変数であるかパーセント文字であるかを確認しますか? どうやってするの?

誰かが例を示すことができますか?

アップデート:

これが私の意図です。実際の環境変数を拡張して非現実の変数を保持することはできますが、同じグループ内の「\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
4

1 に答える 1

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")
于 2013-07-18T02:37:12.373 に答える