2013-07-18 3 views
0

문자열의 모든 변수를 확장하여 문자열의 형식을 지정해야합니다.문자열의 모든 환경 변수 확장 (형식 문자열)

예를 들어

내가이 문자열이있는 경우 :

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

내가 얻기 위해 문자열을 포맷 할이 :

X:\blabla\MyUsername\blabla\MyComputername\%PercentCharacters%blabla 
내가 변수를 확장하는 방법을 알고

하지만, 이는 더 나은 개선이다 이 경우에는 어떻게해야합니까? 어쩌면 정규 표현식 그룹을 사용하여 모든 % vars %를 일치시키고 일치 항목이 실제 var인지 아니면 퍼센트 문자인지 확인할 수 있습니까? 그것을하는 방법?

누군가 예를 보여줄 수 있습니까?

UPDATE : 이것은 내 의도이다

, 나는 비 실시간 바르 보존 바르 실제 환경을 확장 할 수있어,하지만 난 감지하려고 stucked 해요 "\ 즐 \" 동일한 그룹의 파트를 문자열에 추가하십시오.

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

를?

죄송합니다. 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") 
+0

고맙지 만 코드가 도움이되지 않습니다. "바꾸지 않는 이유는 무엇입니까?": "실제가 아닌"변수를 대체하려고하면 제안이 실패하고 시스템에 사용자가 추가 한 사용자 환경 변수가있을 수 있으며 실제로는 추가하지 않으려 고합니다. 문자열을 .replace 함수 35 회 기본 Windows 환경 변수 (게으른 것들에 대한되지 않습니다)에 대한 x35 번 그것은 초보자 프로그래머조차도 귀하의 코드 제안을 사용하는 것이 너무 정확하지, 내가 regex (예를 들어 이것을 사용하여 향상된 방법이 필요) 하지만 어쨌든 고마워. – ElektroStudios

+0

regex를 사용하지 않았다면, instr과 mid는 루프에서 작동 할 것입니다. – prospector

+0

다시 한번 감사 드리지만, VB6 함수가 아닌 vb.net이라는 대체 코드를 사용하는 것이 더 많거나 적습니다. 미안 해요 기억이 필요합니다. 천천히 대체 (또는 왼쪽, 중순) 또는 참조/Microsoft.VisualBasic6 libray 오래된 함수를 사용하려면 및/또는 루프를 수행 할 가져 오기 사용하지 않는 이렇게 향상된 방법을 찾고 있어요. 문자열. – ElektroStudios