특정 문자열의 모든 발생을 반복하고 C #에서 각각 다른 값으로 바꾸시겠습니까?

Nov 14 2020

큰 텍스트 문자열 (소스 코드)이 있고 특정 문자열 (임의의 위치에서 발생할 수 있음)의 발생을 반복하고 각 문자열을 다른 값으로 대체해야합니다. Replace () 함수는 그들 모두를 고유 한 값으로 대체하는 것을 고려합니다.

예를 들어 다음 텍스트 문자열 :

REPLACE_ME

REPLACE_ME

REPLACE_ME

다음과 같이 변환해야합니다.

RAND_STRING1

RAND_STRING2

RAND_STRING3

한 번에 전체 텍스트를 읽고 이미 문자열 변수에 있습니다.

답변

5 MathiasR.Jessen Nov 14 2020 at 22:32

Regex.Replace()MatchEvaluator원하는 것을 수행 할 수 있는 위임을 수락합니다 .

var input = "REPLACE_ME REPLACE_ME REPLACE_ME";

var substring = Regex.Escape("REPLACE_ME");
var substitute = "VALUE";
var counter = 1;

var result = Regex.Replace(input, substring, (m) => $"{prefix}{counter++}");

의 값은 result입니다 "VALUE1 VALUE2 VALUE3".

Regex.Escape()호출이 특정 예 (대한 중복 "REPLACE_ME"필요가 탈출 할 수 있다는 특수 문자를 포함하지 않는),하지만 난에 관계없이 문자 문자열을 탈출하는 습관을 받고 제안 - 당신이 사용자가 제공 한 입력을 허용 할 경우 특히!

물론 평가자에서 원하는 것은 무엇이든 할 수 있습니다.

var random = new Random();
var result = Regex.Replace(input, substring, (m) => random.Next().ToString());
// or
var result = Regex.Replace(input, substring, (m) => {
    var randomString = someAPIClient.GetRandomValueFromRandomValueService();
    var encoded = Encoding.UTF8.GetBytes(randomString);
    return Convert.ToBase64String(encoded);
});

당신의 상상력은 여기에 한계를 설정합니다 :)

2 Mikael Nov 14 2020 at 22:33

정규식 예 :

string[] textFile = File.ReadAllLines("myFile.txt");
var i = 0;
//Stringbuilder will be the contents of our new text file.
StringBuilder sb = new StringBuilder();
//iterate through each line, making our replacements and appending to the string builder
foreach (string line in textFile)
{
    var result = Regex.Replace(
                 line, "REPLACE_ME", m => string.Format("{0}{1}",m.Value,++i), RegexOptions.IgnoreCase);
    sb.AppendLine(result);
}
//Write to new file like so:
StreamWriter sw = new StreamWriter("newFile.txt");
sw.Write(sb.ToString()));
sw.Close();
bre_dev Nov 14 2020 at 22:26

파일을 한 줄씩 탐색해야합니다. 발견 된 nr 인스턴스의 카운터를 유지합니다.

현재 줄에 REPLACE_ME 문자열이 포함되어 있으면 해당 문자열을 임의의 문자열로 바꾸고 카운터 값을 추가하고 카운터 + 1을 업데이트하고 다음 줄로 계속 이동합니다.

그 결과 replace_me의 각 인스턴스가 고유 한 값으로 대체됩니다.