سؤال

ما هو PHP preg_replace في C#؟

لدي مجموعة من السلاسل التي أرغب في استبدالها بمصفوفة أخرى من السلاسل.هنا مثال في PHP.كيف يمكنني أن أفعل شيئًا كهذا في C# دون استخدام .Replace("old"،"new").

$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;
    }
}

وهنا هو ما سوف تستخدم. بعض رمز جوناثان هولندا ولكن ليس في C # 3.5 ولكن في C # 2.0:)

وتشك جميع.

نصائح أخرى

والرجال ريال مدريد استخدام التعابير العادية، ولكن هنا هو طريقة التمديد الذي يضيفه إلى سلسلة إذا كنت تريد ذلك:

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));
        }        
    }

ويمكنك استخدام .إختار () (في. 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 في الطريق لديك تحتاج إلى مثيلات متعددة من `التعبيرات المنتظمة

ولكن، في المثال الخاص بك، وكنت أفضل بكثير يخدمها .Replace (القديمة والجديدة)، هو أسرع بكثير من تجميع أجهزة الدولة.

يحرر:حسنًا، لقد أدركت للتو أن هذا السؤال كان مخصصًا للإصدار 2.0، لكنني سأتركه في حالة إمكانية الوصول إلى الإصدار 3.5.

مجرد نظرة أخرى على شيء Linq.لقد استخدمت الآن List<Char> بدلاً من Char[] ولكن هذا فقط لجعلها تبدو أكثر نظافة.لا توجد طريقة IndexOf في المصفوفات ولكن توجد واحدة في القائمة.لماذا احتاج هذا؟حسنًا، مما أعتقد أنه لا توجد علاقة مباشرة بين قائمة الاستبدال وقائمة الأشخاص الذين سيتم استبدالهم.فقط المؤشر.

لذا، مع أخذ ذلك في الاعتبار، يمكنك القيام بذلك باستخدام 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