Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Regex.Replace (String, String, MatchEvaluator, RegexOptions, TimeSpan)

.NET Framework (current version)
 

Data di pubblicazione: ottobre 2016

In una stringa di input specificata, sostituisce tutte le sottostringhe corrispondenti a un'espressione regolare specificata con una stringa restituita da un delegato MatchEvaluator. I parametri aggiuntivi specificano le opzioni che modificano l'operazione di corrispondenza e un intervallo di timeout se non viene trovata alcuna corrispondenza.

Spazio dei nomi:   System.Text.RegularExpressions
Assembly:  System (in System.dll)

public static string Replace(
	string input,
	string pattern,
	MatchEvaluator evaluator,
	RegexOptions options,
	TimeSpan matchTimeout
)

Parametri

input
Type: System.String

Stringa nella quale cercare una corrispondenza.

pattern
Type: System.String

Criterio di espressione regolare di cui trovare la corrispondenza.

evaluator
Type: System.Text.RegularExpressions.MatchEvaluator

Metodo personalizzato che esamina ogni corrispondenza e restituisce la stringa corrispondente originale o una stringa di sostituzione.

options
Type: System.Text.RegularExpressions.RegexOptions

Combinazione bit per bit dei valori di enumerazione che forniscono le opzioni per la corrispondenza.

matchTimeout
Type: System.TimeSpan

Intervallo di timeout o Regex.InfiniteMatchTimeout per indicare che per il metodo non è previsto un timeout.

Valore restituito

Type: System.String

Stringa nuova identica alla stringa di input, a eccezione del fatto che ogni stringa corrispondente viene sostituita dalla stringa di sostituzione. Se pattern non trova corrispondenza nell'istanza corrente, il metodo restituisce l'istanza corrente invariata.

Exception Condition
ArgumentException

Si è verificato un errore di analisi dell'espressione regolare.

ArgumentNullException

input, pattern o evaluator è null.

ArgumentOutOfRangeException

options non è una combinazione bit per bit valida di valori di RegexOptions.

-oppure-

matchTimeout è negativo, zero o maggiore di circa 24 giorni.

RegexMatchTimeoutException

Si è verificato un timeout. Per altre informazioni sui timeout, vedere la sezione Osservazioni.

Il Regex.Replace(String, String, MatchEvaluator, RegexOptions) metodo è utile per la sostituzione di una corrispondenza di espressione regolare in presenza delle condizioni seguenti:

  • Se la stringa di sostituzione non può essere specificata immediatamente da un criterio di sostituzione di espressioni regolari.

  • Se i risultati della stringa di sostituzione da alcune operazioni di elaborazione eseguita sulla stringa corrispondente.

  • Se la stringa di sostituzione deriva dall'elaborazione condizionale.

Il metodo è equivalente alla chiamata di Regex.Matches(String, String, RegexOptions) e passare ogni Match oggetto nell'oggetto restituito MatchCollection insieme al evaluator delegato.

Il pattern parametro è costituito da elementi del linguaggio di espressioni regolari che descrivono la stringa da confrontare. Per ulteriori informazioni sulle espressioni regolari, vedere Espressioni regolari di .NET Framework e Linguaggio di espressioni regolari - Riferimento rapido.

Il evaluator parametro è il delegato per un metodo personalizzato definito dall'utente e che esamina ogni corrispondenza. Il metodo personalizzato deve avere la firma seguente per trovare la corrispondenza di MatchEvaluator delegato.

public string MatchEvaluatorMethod(Match match)

Il metodo personalizzato restituisce una stringa che sostituisce l'input corrispondente.

Se si specifica RightToLeft per il options parametro, la ricerca delle corrispondenze inizia alla fine della stringa di input e lo sposta a sinistra; in caso contrario, la ricerca inizia all'inizio della stringa di input e viene spostato verso destra.

Il matchTimeout parametro specifica come tempo un modello corrispondente metodo deve tentare di trovare una corrispondenza prima del timeout. L'impostazione di un intervallo di timeout impedisce le espressioni regolari che si basano su un backtracking eccessivo venga visualizzato agli "smettere di funzionare quando elaborano un input che contiene corrispondenze. Per altre informazioni, vedere Procedure consigliate per le espressioni regolari in .NET Framework e Backtracking nelle espressioni regolari. Se viene trovata alcuna corrispondenza in tale intervallo di tempo, il metodo genera un RegexMatchTimeoutException eccezione. matchTimeoutesegue l'override di qualsiasi valore di timeout predefinito definito per il dominio applicazione in cui viene eseguito il metodo.

Poiché il metodo restituisce input invariato se è presente alcuna corrispondenza, è possibile utilizzare il Object.ReferenceEquals metodo per determinare se il metodo ha effettuato le sostituzioni di stringa di input.

Note per i chiamanti:

È consigliabile impostare il matchTimeout parametro su un valore appropriato, ad esempio due secondi. Se si disabilita i timeout specificando Regex.InfiniteMatchTimeout, il motore delle espressioni regolari offre prestazioni leggermente migliori. Tuttavia, è necessario disabilitare i timeout esclusivamente nelle condizioni seguenti:

  • Quando l'input elaborato da un'espressione regolare è derivato da un'origine conosciuta e attendibile o è costituito da testo statico. È escluso il testo che è stato in modo dinamico l'input dagli utenti.

  • Quando il criterio di espressione regolare è stato testato con attenzione per assicurarsi di gestire in modo efficiente trova, mancate corrispondenze e più vicino.

  • Quando il criterio di espressione regolare non contiene language elementi che potrebbero causare l'utilizzo eccessivo del backtracking durante l'elaborazione di una corrispondenza più vicino.

Nell'esempio seguente viene utilizzata un'espressione regolare per estrarre le singole parole da una stringa e quindi viene utilizzato un MatchEvaluator delegato da chiamare un metodo denominato WordScramble che codificata singole lettere della parola. A tale scopo, il WordScramble metodo crea una matrice che contiene i caratteri nella corrispondenza. Crea inoltre una matrice parallela che popola con numeri a virgola mobile casuale. Le matrici vengono ordinate chiamando il Array.Sort<TKey, TValue>(TKey[], TValue[], IComparer<TKey>) metodo e la matrice ordinata viene fornito come argomento a un String costruttore della classe. La stringa appena creata viene quindi restituita dal WordScramble metodo. Criterio di espressione regolare \w+ corrisponde a uno o più caratteri alfanumerici; il motore delle espressioni regolari continuerà a aggiungere caratteri alla corrispondenza finché incontra un carattere non alfanumerico, ad esempio un carattere di spazio vuoto. La chiamata al Replace(String, String, MatchEvaluator, RegexOptions) metodo include il RegexOptions.IgnorePatternWhitespace opzione in modo che il commento nel criterio di espressione regolare \w+ # Matches all the characters in a word. viene ignorata dal motore delle espressioni regolari.

using System;
using System.Collections;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string words = "letter alphabetical missing lack release " + 
                     "penchant slack acryllic laundry cease";
      string pattern = @"\w+  # Matches all the characters in a word.";                            
      MatchEvaluator evaluator = new MatchEvaluator(WordScrambler);
      Console.WriteLine("Original words:");
      Console.WriteLine(words);
      Console.WriteLine();
      try {
         Console.WriteLine("Scrambled words:");
         Console.WriteLine(Regex.Replace(words, pattern, evaluator, 
                                         RegexOptions.IgnorePatternWhitespace,
                                         TimeSpan.FromSeconds(.25)));      
      }
      catch (RegexMatchTimeoutException) {
         Console.WriteLine("Word Scramble operation timed out.");
         Console.WriteLine("Returned words:");
      }
   }

   public static string WordScrambler(Match match)
   {
      int arraySize = match.Value.Length;
      // Define two arrays equal to the number of letters in the match.
      double[] keys = new double[arraySize];
      char[] letters = new char[arraySize];

      // Instantiate random number generator'
      Random rnd = new Random();

      for (int ctr = 0; ctr < match.Value.Length; ctr++)
      {
         // Populate the array of keys with random numbers.
         keys[ctr] = rnd.NextDouble();
         // Assign letter to array of letters.
         letters[ctr] = match.Value[ctr];
      }         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default);      
      return new String(letters);
   }
}
// The example displays output similar to the following:
//    Original words:
//    letter alphabetical missing lack release penchant slack acryllic laundry cease
//    
//    Scrambled words:
//    etlert liahepalbcat imsgsni alkc ereelsa epcnnaht lscak cayirllc alnyurd ecsae

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 4.5
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Windows Phone Silverlight
Disponibile da 8.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: