문제

C#의 PHP preg_replace는 무엇입니까?

다른 문자열 배열로 바꾸고 싶은 문자열 배열이 있습니다. 다음은 PHP의 예입니다. .replace ( "Old", "New")를 사용하지 않고 C#에서 어떻게 그렇게 할 수 있습니까?

$patterns[0] = '/=C0/';
$patterns[1] = '/=E9/';
$patterns[2] = '/=C9/';


$replacements[0] = 'à';
$replacements[1] = 'é';
$replacements[2] = 'é';
return preg_replace($patterns, $replacements, $text);
도움이 되었습니까?

해결책 3

public static class StringManipulation
{
    public static string PregReplace(string input, string[] pattern, string[] replacements)
    {
        if (replacements.Length != pattern.Length)
            throw new ArgumentException("Replacement and Pattern Arrays must be balanced");

        for (int i = 0; i < pattern.Length; i++)
        {
            input = Regex.Replace(input, pattern[i], replacements[i]);                
        }

        return input;
    }
}

여기 내가 사용할 내용이 있습니다. Jonathan Holland의 일부 코드이지만 C#3.5는 아니지만 C#2.0 :)

thx 모두.

다른 팁

실제 남성은 정규 표현을 사용하지만 원하는 경우 문자열에 추가하는 확장 방법이 있습니다.

public static class ExtensionMethods
{
    public static String PregReplace(this String input, string[] pattern, string[] replacements)
    {
        if (replacements.Length != pattern.Length)
            throw new ArgumentException("Replacement and Pattern Arrays must be balanced");

        for (var i = 0; i < pattern.Length; i++)
        {
            input = Regex.Replace(input, pattern[i], replacements[i]);                
        }

        return input;
    }
}

당신은 이것을 사용합니다 :

 class Program
    {
        static void Main(string[] args)
        {
            String[] pattern = new String[4];
            String[] replacement = new String[4];

            pattern[0] = "Quick";
            pattern[1] = "Fox";
            pattern[2] = "Jumped";
            pattern[3] = "Lazy";

            replacement[0] = "Slow";            
            replacement[1] = "Turtle";
            replacement[2] = "Crawled";
            replacement[3] = "Dead";

            String DemoText = "The Quick Brown Fox Jumped Over the Lazy Dog";

            Console.WriteLine(DemoText.PregReplace(pattern, replacement));
        }        
    }

.Select () (.NET 3.5 및 C# 3)을 사용하여 컬렉션 구성원에게 기능을 적용 할 수 있습니다.

stringsList.Select( s => replacementsList.Select( r => s.Replace(s,r) ) );

REGEXP 지원이 필요하지 않으며 배열을 쉽게 반복 할 수있는 방법을 원합니다.

당신이 찾고있는 System.Text.RegularExpressions;

using System.Text.RegularExpressions;

Regex r = new Regex("=C0");
string output = r.Replace(text);

PHP의 배열 동작을 얻으려면`REGEX의 여러 인스턴스가 필요합니다.

그러나 예를 들어 .replace (오래된, 신규)가 훨씬 잘 제공되면 상태 기계를 컴파일하는 것보다 훨씬 빠릅니다.

편집 : UHG 방금이 질문이 2.0이라는 사실을 깨달았지만 3.5에 액세스 할 수있는 경우 남겨 둘 것입니다.

LINQ를 다시 한 번 가져옵니다. 이제 목록을 사용했습니다u003CChar> char [] 대신에 그것은 단지 그것을 조금 더 깨끗하게 보이게하는 것입니다. 배열에는 인덱스의 메소드가 없지만 목록에 하나가 있습니다. 왜 이것을 필요로 했습니까? 내가 추측하는 바에 따르면 교체 목록과 교체 할 목록 목록 사이에는 직접적인 상관 관계가 없습니다. 단지 색인.

따라서 그 점을 염두에두고 char []만으로도 할 수 있습니다. 그러나 indexof 메소드가 표시되면 .tolist ()를 추가해야합니다.

다음과 같이 : somearray.tolist (). indexof

  String text;
  List<Char> patternsToReplace;
  List<Char> patternsToUse;

  patternsToReplace = new List<Char>();
  patternsToReplace.Add('a');
  patternsToReplace.Add('c');
  patternsToUse = new List<Char>();
  patternsToUse.Add('X');
  patternsToUse.Add('Z');

  text = "This is a thing to replace stuff with";

  var allAsAndCs = text.ToCharArray()
                 .Select
                 (
                   currentItem => patternsToReplace.Contains(currentItem) 
                     ? patternsToUse[patternsToReplace.IndexOf(currentItem)] 
                     : currentItem
                 )
                 .ToArray();

  text = new String(allAsAndCs);

이것은 단지 텍스트를 문자 배열로 변환하고 각 배열을 선택합니다. 현재 문자가 교체 목록에 있지 않은 경우 캐릭터를 그대로 다시 보내십시오. 교체 목록에있는 경우 교체 문자 목록의 동일한 색인에서 문자를 반환하십시오. 마지막은 문자 배열에서 문자열을 만드는 것입니다.

  using System;
  using System.Collections.Generic;
  using System.Linq;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top