2014-11-27 1 views
2

나는 다음과 같은 문자열을 다른 값으로 문자열을 대체 할 : 내가 원하는 무엇은 어떻게 추출하고

교체는 "연결되어 다음과 같은 데이터 [EnvironmentVar] [TestAccount] 상태 사용"[EnvironmentVar] [TestAccount]는 XML 파일에서 데이터를 검색합니다. 그래서 먼저 [EnvironmentVar] [TestAccount]를 자체 문자열로 추출한 다음 XML을 쿼리하는 메서드가 이미 있습니다. 그러나 그 값을 검색하면 필요한 작업은 이미 다음과 같이됩니다. 원래 문자열. 다른 변화구가있다

, 구조는 늘 항상 : 내가있는 한

[SystemTest][EnvironmentVar][TestAccount] 

또는

[Region][SystemTest][EnvironmentVar][TestAccount] 

:

[EnvironmentVar][TestAccount] 

이 같은 별도의 "노드"있을 수 있습니다 원래 패턴에서이 패턴을 추출 할 수 있습니다. 데이터를 가져올 수 있습니다. 앞서 언급 한 것처럼 내가 할 수 있어야 할 것은 "[SystemTest] [EnvironmentVar] [TestAccount]"를 내가 검색 한 데이터로 대체하는 것입니다. 그래서 예를 들어 "UKUser"가 반환되어 새로운 문자열이 "UKUser 상태가 연결되었습니다"라는 데이터를 사용하게 될 것입니다.

아무 지침이나 알려 드리겠습니다. 이것을하는 많은 방법.

업데이트

을 Heres 예를 경우

string myQuery = "Using the following data [SystemTest][EnvironmentVar][TestAccount]"; 

string xmlQuery = RetrieveXMLQuery(myQuery); 

//So now I want xmlQuery to be "[SystemTest][EnvironmentVar][TestAccount]" 
//XML query now gets executed 
string xmlResult = RetrieveXMLValue(xmlQuery); 
//xmlResult would now be "UKUser" 

//Now what I want to do is take the string "Using the following data [SystemTest][EnvironmentVar][TestAccount]" and replace the nodes with UKUser is it becomes "Using the following data UKUser" 
//Remember that the number of nodes and the sequence wont always be the same... 
+2

'str = str.Replace ("[TestAccount]", "새 데이터를 여기에"); 정규 표현식을 사용해야합니까? –

+0

그 나머지는 TestAccount를 대체 할 것이고 나머지는 문자열 내에 남을 것입니다. 좀 더 많은 정보를 가지고 제 질문을 업데이트 할 것입니다. – Festivejelly

+0

나머지는? 한 번에 하나의 키워드를 대체해야하는 서로 다른 후에 여러 번 바꾸기 호출을 실행합니다. 물론 성능 최적화가 아닐 수도 있지만 정규 표현식도 아닙니다. –

답변

1

당신은 그들이 존재하는 경우, 너무 "추가 노드"를 교체하려면 :

string input = "Using the following data [EnvironmentVar][TestAccount] status is connected"; 
string newData = "UKUser"; 
string output = Regex.Replace(input, @"(\[.*\])", newData); 
Console.WriteLine(output); // Using the following data UKUser status is connected 
+0

이 문제는 시퀀스가 ​​바뀌면 작동하지 않을 수도 있습니다. 런타임시 문자열이 다를 수 있습니다. 어떤 문자열에 대해서도 사용할 수있는 솔루션을 찾고 있습니다. – Festivejelly

+0

@Jonkers - 답변을 업데이트했습니다. 시도 해봐. – fubo

+0

아주 좋은이 문자열을 대체 멋지게 작동합니다. 나는 그걸로 행복하다. [EnvironmentVar] [TestAccount] (또는 유사한)를 원래 문자열에서 추출하는 것과 비슷한 방법을 사용할 수 있습니까? – Festivejelly

0

당신은 토큰을 깰 수 있으며, 개별적으로 처리;

text = Regex.Replace(text, @"(\[[A-Za-z]+\])", delegate(Match match) 
     { 
      switch (match.Groups[1].Value) 
      { 
       case "[SystemTest]": 
        return (string)SomeXml.Element("SystemTestNode"); 

       case "[TestAccount]": 
        return "123456"; 

       default: 
        return ""; 
      } 
     }); 
+0

의미가 있지만, [] 사이의 값이 XML 파일의 노드라고 상상해보십시오. 나는 그들이 무엇을하려고하는지 항상 모른다. 그래서이 접근법에서는 이드를 모두 매핑해야합니다. – Festivejelly

0

패턴이 항상 [으로 끝나고]로 시작하는 경우 부분 문자열 만 사용하면 쉽게 수행 할 수 있습니다.

string original = "Using the following data [EnvironmentVar][TestAccount] status is connected"; 
string replacementText = "UKUser"; 

string newString = original.Substring(0, original.IndexOf("[")) + replacementText + original.Substring(original.LastIndexOf("]")+1); 
+0

흥미로운 접근법.나는 이것을 확실히 사용할 수 있었다. 패턴은 항상 [로 끝나는] – Festivejelly

+0

나는 테스트하지 않은,하지만이 또한 정규식을 사용하는 것보다 효율적이라고 추측하고있어. 대괄호가 있는지 확인하기 위해 오류 처리 또는 유효성 검사를 추가 할 수도 있습니다. – Kevin

+0

아, 오류 처리와 관련하여 참으로 좋은 점이 있습니다. – Festivejelly