Regex.Replace Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
I en angiven indatasträng ersätter strängar som matchar ett mönster för reguljära uttryck med en angiven ersättningssträng.
Överlagringar
| Name | Description |
|---|---|
| Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan) |
I en angiven indatasträng ersätter alla delsträngar som matchar ett angivet reguljärt uttryck med en sträng som returneras av ett MatchEvaluator ombud. Ytterligare parametrar anger alternativ som ändrar matchningsåtgärden och ett tidsgränsintervall om ingen matchning hittas. |
| Replace(String, String, String, RegexOptions, TimeSpan) |
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en angiven ersättningssträng. Ytterligare parametrar anger alternativ som ändrar matchningsåtgärden och ett tidsgränsintervall om ingen matchning hittas. |
| Replace(String, MatchEvaluator, Int32, Int32) |
I en angiven indatadelsträng ersätter ett angivet maximalt antal strängar som matchar ett mönster för reguljära uttryck med en sträng som returneras av ett MatchEvaluator ombud. |
| Replace(String, String, MatchEvaluator, RegexOptions) |
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en sträng som returneras av ett MatchEvaluator ombud. Angivna alternativ ändrar matchningsåtgärden. |
| Replace(String, String, Int32, Int32) |
I en angiven indatadelsträng ersätter ett angivet maximalt antal strängar som matchar ett mönster för reguljära uttryck med en angiven ersättningssträng. |
| Replace(String, String, String, RegexOptions) |
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en angiven ersättningssträng. Angivna alternativ ändrar matchningsåtgärden. |
| Replace(String, String, MatchEvaluator) |
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en sträng som returneras av ett MatchEvaluator ombud. |
| Replace(String, String, String) |
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en angiven ersättningssträng. |
| Replace(String, String, Int32) |
I en angiven indatasträng ersätter ett angivet maximalt antal strängar som matchar ett mönster för reguljära uttryck med en angiven ersättningssträng. |
| Replace(String, MatchEvaluator) |
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en sträng som returneras av ett MatchEvaluator ombud. |
| Replace(String, String) |
I en angiven indatasträng ersätter alla strängar som matchar ett mönster för reguljära uttryck med en angiven ersättningssträng. |
| Replace(String, MatchEvaluator, Int32) |
I en angiven indatasträng ersätter ett angivet maximalt antal strängar som matchar ett mönster för reguljära uttryck med en sträng som returneras av ett MatchEvaluator ombud. |
Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan)
I en angiven indatasträng ersätter alla delsträngar som matchar ett angivet reguljärt uttryck med en sträng som returneras av ett MatchEvaluator ombud. Ytterligare parametrar anger alternativ som ändrar matchningsåtgärden och ett tidsgränsintervall om ingen matchning hittas.
public:
static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, System::Text::RegularExpressions::RegexOptions options, TimeSpan matchTimeout);
public static string Replace(string input, string pattern, System.Text.RegularExpressions.MatchEvaluator evaluator, System.Text.RegularExpressions.RegexOptions options, TimeSpan matchTimeout);
static member Replace : string * string * System.Text.RegularExpressions.MatchEvaluator * System.Text.RegularExpressions.RegexOptions * TimeSpan -> string
Public Shared Function Replace (input As String, pattern As String, evaluator As MatchEvaluator, options As RegexOptions, matchTimeout As TimeSpan) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- pattern
- String
Det reguljära uttrycksmönster som ska matchas.
- evaluator
- MatchEvaluator
En anpassad metod som undersöker varje matchning och returnerar antingen den ursprungliga matchade strängen eller en ersättningssträng.
- options
- RegexOptions
En bitvis kombination av uppräkningsvärden som ger alternativ för matchning.
- matchTimeout
- TimeSpan
Ett tidsgränsintervall, eller InfiniteMatchTimeout för att indikera att metoden inte bör överskrida tidsgränsen.
Returer
En ny sträng som är identisk med indatasträngen, förutom att ersättningssträngen ersätter varje matchad sträng. Om pattern inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
Ett fel uppstod vid parsning av reguljära uttryck.
input, pattern, eller evaluator är null.
options är inte en giltig bitvis kombination av RegexOptions värden.
-eller-
matchTimeout är negativ, noll eller större än cirka 24 dagar.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande exempel används ett reguljärt uttryck för att extrahera enskilda ord från en sträng och använder sedan ett MatchEvaluator ombud för att anropa en metod med namnet WordScramble som förvränger de enskilda bokstäverna i ordet. För att göra detta WordScramble skapar metoden en matris som innehåller tecknen i matchningen. Den skapar också en parallell matris som fylls i med slumpmässiga flyttalsnummer. Matriserna sorteras genom att anropa Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) metoden och den sorterade matrisen tillhandahålls som ett argument till en String klasskonstruktor. Den här nyskapade strängen WordScramble returneras sedan av metoden . Det reguljära uttrycksmönstret \w+ matchar ett eller flera ordtecken. Motorn för reguljära uttryck fortsätter att lägga till tecken i matchningen tills det stöter på ett icke-ordtecken, till exempel ett blankstegstecken. Anropet Replace(String, String, MatchEvaluator, RegexOptions) till metoden innehåller RegexOptions.IgnorePatternWhitespace alternativet så att kommentaren i reguljärt uttrycksmönster \w+ # Matches all the characters in a word. ignoreras av motorn för reguljära uttryck.
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
Imports System.Collections
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim words As String = "letter alphabetical missing lack release " + _
"penchant slack acryllic laundry cease"
Dim pattern As String = "\w+ # Matches all the characters in a word."
Dim evaluator As MatchEvaluator = AddressOf WordScrambler
Console.WriteLine("Original words:")
Console.WriteLine(words)
Try
Console.WriteLine("Scrambled words:")
Console.WriteLine(Regex.Replace(words, pattern, evaluator,
RegexOptions.IgnorePatternWhitespace,
TimeSpan.FromSeconds(.25)))
Catch e As RegexMatchTimeoutException
Console.WriteLine("Word Scramble operation timed out.")
Console.WriteLine("Returned words:")
End Try
End Sub
Public Function WordScrambler(match As Match) As String
Dim arraySize As Integer = match.Value.Length - 1
' Define two arrays equal to the number of letters in the match.
Dim keys(arraySize) As Double
Dim letters(arraySize) As Char
' Instantiate random number generator'
Dim rnd As New Random()
For ctr As Integer = 0 To match.Value.Length - 1
' Populate the array of keys with random numbers.
keys(ctr) = rnd.NextDouble()
' Assign letter to array of letters.
letters(ctr) = match.Value.Chars(ctr)
Next
Array.Sort(keys, letters, 0, arraySize, Comparer.Default)
Return New String(letters)
End Function
End Module
' 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
Kommentarer
Metoden Regex.Replace(String, String, MatchEvaluator, RegexOptions) är användbar för att ersätta en reguljär uttrycksmatchning om något av följande villkor är sant:
Om ersättningssträngen inte enkelt kan anges med ett mönster för ersättning av reguljära uttryck.
Om ersättningssträngen är resultatet av viss bearbetning som utförs på den matchade strängen.
Om ersättningssträngen är resultatet av villkorsstyrd bearbetning.
Metoden motsvarar att anropa Regex.Matches(String, String, RegexOptions) metoden och skicka varje Match objekt i den returnerade MatchCollection samlingen till ombudet evaluator .
Parametern pattern består av reguljära uttrycksspråkelement som symboliskt beskriver strängen som ska matchas. Mer information om reguljära uttryck finns i .NET reguljära uttryck och Regular Expression Language – Snabbreferens.
Parametern evaluator är ombudet för en anpassad metod som du definierar och som undersöker varje matchning. Den anpassade metoden måste ha följande signatur för att matcha ombudet MatchEvaluator .
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Din anpassade metod returnerar en sträng som ersätter de matchade indata.
Om du anger RightToLeft parametern options börjar sökningen efter matchningar i slutet av indatasträngen och flyttas åt vänster. Annars börjar sökningen i början av indatasträngen och flyttas åt höger.
Parametern matchTimeout anger hur länge en mönstermatchningsmetod ska försöka hitta en matchning innan tidsgränsen uppnås. Om du anger ett tidsgränsintervall förhindras reguljära uttryck som förlitar sig på överdriven bakåtspårning från att visas som "sluta svara när de bearbetar indata som innehåller nära matchningar. Mer information finns i Metodtips för reguljära uttryck och bakåtspårning. Om ingen matchning hittas i det tidsintervallet utlöser metoden ett RegexMatchTimeoutException undantag.
matchTimeout åsidosätter alla standardvärden för timeout som definierats för programdomänen där metoden körs.
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Anteckningar till anropare
Vi rekommenderar att du anger parametern matchTimeout till ett lämpligt värde, till exempel två sekunder. Om du inaktiverar tidsgränser genom att ange ger motorn för reguljära InfiniteMatchTimeoututtryck något bättre prestanda. Du bör dock inaktivera tidsgränser endast under följande villkor:
När indata som bearbetas av ett reguljärt uttryck härleds från en känd och betrodd källa eller består av statisk text. Detta exkluderar text som har matats in dynamiskt av användare.
När mönstret för reguljära uttryck har testats noggrant för att säkerställa att det effektivt hanterar matchningar, icke-matchningar och nära matchningar.
När det reguljära uttrycksmönstret inte innehåller några språkelement som är kända för att orsaka överdriven bakåtspårning vid bearbetning av en nära matchning.
Se även
- RegexOptions
- Ersättningar i reguljära uttryck
- Språkelement för reguljära uttryck
- Bakåtspårning i reguljära uttryck
- Bäste metoder för reguljära uttryck i .NET
Gäller för
Replace(String, String, String, RegexOptions, TimeSpan)
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en angiven ersättningssträng. Ytterligare parametrar anger alternativ som ändrar matchningsåtgärden och ett tidsgränsintervall om ingen matchning hittas.
public:
static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::String ^ replacement, System::Text::RegularExpressions::RegexOptions options, TimeSpan matchTimeout);
public static string Replace(string input, string pattern, string replacement, System.Text.RegularExpressions.RegexOptions options, TimeSpan matchTimeout);
static member Replace : string * string * string * System.Text.RegularExpressions.RegexOptions * TimeSpan -> string
Public Shared Function Replace (input As String, pattern As String, replacement As String, options As RegexOptions, matchTimeout As TimeSpan) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- pattern
- String
Det reguljära uttrycksmönster som ska matchas.
- replacement
- String
Ersättningssträngen.
- options
- RegexOptions
En bitvis kombination av uppräkningsvärdena som ger alternativ för matchning.
- matchTimeout
- TimeSpan
Ett tidsgränsintervall, eller InfiniteMatchTimeout för att indikera att metoden inte bör överskrida tidsgränsen.
Returer
En ny sträng som är identisk med indatasträngen, förutom att ersättningssträngen ersätter varje matchad sträng. Om pattern inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
Ett fel uppstod vid parsning av reguljära uttryck.
input, pattern, eller replacement är null.
options är inte en giltig bitvis kombination av RegexOptions värden.
-eller-
matchTimeout är negativ, noll eller större än cirka 24 dagar.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande exempel används Replace(String, String, String, RegexOptions, TimeSpan) metoden för att ersätta den lokala datorn och enhetsnamnen i en UNC-sökväg med en lokal filsökväg. Det reguljära uttrycket använder Environment.MachineName egenskapen för att inkludera namnet på den lokala datorn och Environment.GetLogicalDrives metoden för att inkludera namnen på de logiska enheterna. Alla jämförelser av reguljära uttryckssträngar är skiftlägesokänsliga och en enskild ersättningsåtgärd överskrider tidsgränsen om en matchning inte kan hittas på 0,5 sekunder. Om du vill köra exemplet bör du ersätta strängen "MyMachine" med namnet på den lokala datorn.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
// Get drives available on local computer and form into a single character expression.
string[] drives = Environment.GetLogicalDrives();
string driveNames = String.Empty;
foreach (string drive in drives)
driveNames += drive.Substring(0,1);
// Create regular expression pattern dynamically based on local machine information.
string pattern = @"\\\\" + Environment.MachineName + @"(?:\.\w+)*\\([" + driveNames + @"])\$";
string replacement = "$1:";
string[] uncPaths = { @"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt",
@"\\MyMachine\c$\ThingsToDo.txt",
@"\\MyMachine\d$\documents\mydocument.docx" };
foreach (string uncPath in uncPaths)
{
Console.WriteLine("Input string: " + uncPath);
string localPath = null;
try {
localPath = Regex.Replace(uncPath, pattern, replacement,
RegexOptions.IgnoreCase,
TimeSpan.FromSeconds(0.5));
Console.WriteLine("Returned string: " + localPath);
}
catch (RegexMatchTimeoutException) {
Console.WriteLine("The replace operation timed out.");
Console.WriteLine("Returned string: " + localPath);
if (uncPath.Equals(localPath))
Console.WriteLine("Equal to original path.");
else
Console.WriteLine("Original string: " + uncPath);
}
Console.WriteLine();
}
}
}
// The example displays the following output if run on a machine whose name is
// MyMachine:
// Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
// Returned string: C:\ThingsToDo.txt
//
// Input string: \\MyMachine\c$\ThingsToDo.txt
// Returned string: c:\ThingsToDo.txt
//
// Input string: \\MyMachine\d$\documents\mydocument.docx
// Returned string: d:\documents\mydocument.docx
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
' Get drives available on local computer and form into a single character expression.
Dim drives() As String = Environment.GetLogicalDrives()
Dim driveNames As String = Nothing
For Each drive As String In drives
driveNames += drive.Substring(0,1)
Next
' Create regular expression pattern dynamically based on local machine information.
Dim pattern As String = "\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"
Dim replacement As String = "$1:"
Dim uncPaths() AS String = {"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", _
"\\MyMachine\c$\ThingsToDo.txt", _
"\\MyMachine\d$\documents\mydocument.docx" }
For Each uncPath As String In uncPaths
Console.WriteLine("Input string: " + uncPath)
Dim localPath As String = Nothing
Try
localPath = Regex.Replace(uncPath, pattern, replacement,
RegexOptions.IgnoreCase,
TimeSpan.FromSeconds(0.5))
Console.WriteLine("Returned string: " + localPath)
Catch e As RegexMatchTimeoutException
Console.WriteLine("The replace operation timed out.")
Console.WriteLine("Returned string: " + localPath)
If uncPath.Equals(localPath) Then
Console.WriteLine("Equal to original path.")
Else
Console.WriteLine("Original string: " + uncPath)
End If
End Try
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output if run on a machine whose name is
' MyMachine:
' Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
' Returned string: C:\ThingsToDo.txt
'
' Input string: \\MyMachine\c$\ThingsToDo.txt
' Returned string: c:\ThingsToDo.txt
'
' Input string: \\MyMachine\d$\documents\mydocument.docx
' Returned string: d:\documents\mydocument.docx
Mönstret för reguljära uttryck definieras av följande uttryck:
"\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"
I följande tabell visas hur mönstret för reguljära uttryck tolkas.
| Mönster | Description |
|---|---|
\\\\ |
Matcha två på varandra följande omvänt snedstreck (\) tecken. Eftersom omvänt snedstreck tolkas som escape-tecknet måste varje omvänt snedstreck undvikas med ett annat omvänt snedstreck. |
+ Environment.MachineName + |
Matcha strängen som returneras av egenskapen Environment.MachineName . |
(?:\.\w+)* |
Matcha punkttecknet (.) följt av ett eller flera ordtecken. Den här matchning kan inträffa noll eller fler gånger. Den matchade underuttrycket registreras inte. |
\\ |
Matcha ett omvänt snedstreck (\) tecken. |
([" + driveNames + "]) |
Matcha teckenklassen som består av de enskilda enhetsbeteckningarna. Den här matchningen är den första insamlade subexpressionen. |
\$ |
Matcha teckentecknet för literal dollar ($). |
Ersättningsmönstret $1 ersätter hela matchningen med den första insamlade subexpressionen. Det vill: den ersätter UNC-datorn och enhetsnamnet med enhetsbeteckningen.
Kommentarer
De statiska Replace metoderna motsvarar konstruera ett Regex objekt med det angivna reguljära uttrycksmönstret och anropa instansmetoden Replace.
Parametern pattern består av reguljära uttrycksspråkelement som symboliskt beskriver strängen som ska matchas. Mer information om reguljära uttryck finns i .NET reguljära uttryck och Regular Expression Language – Snabbreferens. Om du anger RightToLeft parametern options börjar sökningen efter matchningar i slutet av indatasträngen och flyttas åt vänster. Annars börjar sökningen i början av indatasträngen och flyttas åt höger.
Parametern replacement anger den sträng som ska ersätta varje matchning i input.
replacement kan bestå av valfri kombination av literaltext och ersättningar. Ersättningsmönstret a*${test}b infogar till exempel strängen "a*" följt av den delsträng som matchas av den test eventuella insamlingsgruppen följt av strängen "b". *-tecknet identifieras inte som ett metakarakter i ett ersättningsmönster.
Note
Substitutioner är de enda språkelementen för reguljära uttryck som identifieras i ett ersättningsmönster. Alla andra språkelement för reguljära uttryck, inklusive teckenutrymningar, tillåts endast i reguljära uttrycksmönster och identifieras inte i ersättningsmönster.
Parametern matchTimeout anger hur länge en mönstermatchningsmetod ska försöka hitta en matchning innan tidsgränsen uppnås. Om du anger ett tidsgränsintervall förhindras reguljära uttryck som förlitar sig på överdriven bakåtspårning från att verka sluta svara när de bearbetar indata som innehåller nära matchningar. Mer information finns i Metodtips för reguljära uttryck och bakåtspårning. Om ingen matchning hittas i det tidsintervallet utlöser metoden ett RegexMatchTimeoutException undantag.
matchTimeout åsidosätter alla standardvärden för timeout som definierats för programdomänen där metoden körs.
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Anteckningar till anropare
Vi rekommenderar att du anger parametern matchTimeout till ett lämpligt värde, till exempel två sekunder. Om du inaktiverar tidsgränser genom att ange ger motorn för reguljära InfiniteMatchTimeoututtryck något bättre prestanda. Du bör dock inaktivera tidsgränser endast under följande villkor:
När indata som bearbetas av ett reguljärt uttryck härleds från en känd och betrodd källa eller består av statisk text. Detta exkluderar text som har matats in dynamiskt av användare.
När mönstret för reguljära uttryck har testats noggrant för att säkerställa att det effektivt hanterar matchningar, icke-matchningar och nära matchningar.
När det reguljära uttrycksmönstret inte innehåller några språkelement som är kända för att orsaka överdriven bakåtspårning vid bearbetning av en nära matchning.
Se även
- RegexOptions
- Ersättningar i reguljära uttryck
- Språkelement för reguljära uttryck
- Bakåtspårning i reguljära uttryck
- Bäste metoder för reguljära uttryck i .NET
Gäller för
Replace(String, MatchEvaluator, Int32, Int32)
I en angiven indatadelsträng ersätter ett angivet maximalt antal strängar som matchar ett mönster för reguljära uttryck med en sträng som returneras av ett MatchEvaluator ombud.
public:
System::String ^ Replace(System::String ^ input, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, int count, int startat);
public string Replace(string input, System.Text.RegularExpressions.MatchEvaluator evaluator, int count, int startat);
member this.Replace : string * System.Text.RegularExpressions.MatchEvaluator * int * int -> string
Public Function Replace (input As String, evaluator As MatchEvaluator, count As Integer, startat As Integer) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- evaluator
- MatchEvaluator
En anpassad metod som undersöker varje matchning och returnerar antingen den ursprungliga matchade strängen eller en ersättningssträng.
- count
- Int32
Det maximala antalet gånger som ersättningen sker.
- startat
- Int32
Teckenpositionen i indatasträngen där sökningen börjar.
Returer
En ny sträng som är identisk med indatasträngen, förutom att en ersättningssträng ersätter varje matchad sträng. Om mönstret för reguljära uttryck inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
input eller evaluator är null.
startat är mindre än noll eller större än längden på input.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Kommentarer
Metoden Regex.Replace(String, MatchEvaluator, Int32, Int32) är användbar för att ersätta en reguljär uttrycksmatchning om något av följande villkor är sant:
- Ersättningssträngen kan inte enkelt anges med ett ersättningsmönster för reguljära uttryck.
- Ersättningssträngen är resultatet av viss bearbetning som utförts på den matchade strängen.
- Ersättningssträngen är resultatet av villkorsstyrd bearbetning.
Metoden motsvarar att anropa Regex.Matches(String, Int32) metoden och skicka de förstaMatchcountobjekten i den returnerade MatchCollection samlingen till ombudetevaluator.
Mer information om startatfinns i avsnittet Kommentarer i Match(String, Int32).
Det reguljära uttrycket är det mönster som definieras av konstruktorn för det aktuella Regex objektet.
Parametern evaluator är ombudet för en anpassad metod som du definierar och som undersöker varje matchning. Den anpassade metoden måste ha följande signatur för att matcha ombudet MatchEvaluator .
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Din anpassade metod returnerar en sträng som ersätter de matchade indata.
Undantaget RegexMatchTimeoutException utlöses om körningstiden för ersättningsåtgärden överskrider det tidsgränsintervall som anges av Regex.Regex(String, RegexOptions, TimeSpan) konstruktorn. Om du inte anger ett tidsgränsintervall när du anropar konstruktorn utlöses undantaget om åtgärden överskrider ett timeout-värde som har upprättats för programdomänen Regex där objektet skapas. Om ingen tidsgräns har definierats i konstruktoranropet Regex eller i programdomänens egenskaper, eller om tidsgränsvärdet är Regex.InfiniteMatchTimeout, genereras inget undantag
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Se även
Gäller för
Replace(String, String, MatchEvaluator, RegexOptions)
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en sträng som returneras av ett MatchEvaluator ombud. Angivna alternativ ändrar matchningsåtgärden.
public:
static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, System::Text::RegularExpressions::RegexOptions options);
public static string Replace(string input, string pattern, System.Text.RegularExpressions.MatchEvaluator evaluator, System.Text.RegularExpressions.RegexOptions options);
static member Replace : string * string * System.Text.RegularExpressions.MatchEvaluator * System.Text.RegularExpressions.RegexOptions -> string
Public Shared Function Replace (input As String, pattern As String, evaluator As MatchEvaluator, options As RegexOptions) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- pattern
- String
Det reguljära uttrycksmönster som ska matchas.
- evaluator
- MatchEvaluator
En anpassad metod som undersöker varje matchning och returnerar antingen den ursprungliga matchade strängen eller en ersättningssträng.
- options
- RegexOptions
En bitvis kombination av uppräkningsvärdena som ger alternativ för matchning.
Returer
En ny sträng som är identisk med indatasträngen, förutom att en ersättningssträng ersätter varje matchad sträng. Om pattern inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
Ett fel uppstod vid parsning av reguljära uttryck.
input, pattern, eller evaluator är null.
options är inte en giltig bitvis kombination av RegexOptions värden.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande exempel används ett reguljärt uttryck för att extrahera enskilda ord från en sträng och använder sedan ett MatchEvaluator ombud för att anropa en metod med namnet WordScramble som förvränger de enskilda bokstäverna i ordet. För att göra detta WordScramble skapar metoden en matris som innehåller tecknen i matchningen. Den skapar också en parallell matris som fylls i med slumpmässiga flyttalsnummer. Matriserna sorteras genom att anropa Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) metoden och den sorterade matrisen tillhandahålls som ett argument till en String klasskonstruktor. Den här nyskapade strängen WordScramble returneras sedan av metoden . Det reguljära uttrycksmönstret \w+ matchar ett eller flera ordtecken. Motorn för reguljära uttryck fortsätter att lägga till tecken i matchningen tills det stöter på ett icke-ordtecken, till exempel ett blankstegstecken. Anropet Replace(String, String, MatchEvaluator, RegexOptions) till metoden innehåller RegexOptions.IgnorePatternWhitespace alternativet så att kommentaren i reguljärt uttrycksmönster \w+ # Matches all the characters in a word. ignoreras av motorn för reguljära uttryck.
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();
Console.WriteLine("Scrambled words:");
Console.WriteLine(Regex.Replace(words, pattern, evaluator,
RegexOptions.IgnorePatternWhitespace));
}
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
Imports System.Collections
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim words As String = "letter alphabetical missing lack release " + _
"penchant slack acryllic laundry cease"
Dim pattern As String = "\w+ # Matches all the characters in a word."
Dim evaluator As MatchEvaluator = AddressOf WordScrambler
Console.WriteLine("Original words:")
Console.WriteLine(words)
Console.WriteLine("Scrambled words:")
Console.WriteLine(Regex.Replace(words, pattern, evaluator,
RegexOptions.IgnorePatternWhitespace))
End Sub
Public Function WordScrambler(match As Match) As String
Dim arraySize As Integer = match.Value.Length - 1
' Define two arrays equal to the number of letters in the match.
Dim keys(arraySize) As Double
Dim letters(arraySize) As Char
' Instantiate random number generator'
Dim rnd As New Random()
For ctr As Integer = 0 To match.Value.Length - 1
' Populate the array of keys with random numbers.
keys(ctr) = rnd.NextDouble()
' Assign letter to array of letters.
letters(ctr) = match.Value.Chars(ctr)
Next
Array.Sort(keys, letters, 0, arraySize, Comparer.Default)
Return New String(letters)
End Function
End Module
' 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
Kommentarer
Metoden Regex.Replace(String, String, MatchEvaluator, RegexOptions) är användbar för att ersätta en reguljär uttrycksmatchning i om något av följande villkor är sant:
Ersättningssträngen kan inte enkelt anges med ett ersättningsmönster för reguljära uttryck.
Ersättningssträngen är resultatet av viss bearbetning som utförts på den matchade strängen.
Ersättningssträngen är resultatet av villkorsstyrd bearbetning.
Metoden motsvarar att anropa Regex.Matches(String, String, RegexOptions) metoden och skicka varje Match objekt i den returnerade MatchCollection samlingen till ombudet evaluator .
Parametern pattern består av reguljära uttrycksspråkelement som symboliskt beskriver strängen som ska matchas. Mer information om reguljära uttryck finns i .NET reguljära uttryck och Regular Expression Language – Snabbreferens.
Parametern evaluator är ombudet för en anpassad metod som du definierar och som undersöker varje matchning. Den anpassade metoden måste ha följande signatur för att matcha ombudet MatchEvaluator .
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Din anpassade metod returnerar en sträng som ersätter de matchade indata.
Om du anger RightToLeft parametern options börjar sökningen efter matchningar i slutet av indatasträngen och flyttas åt vänster. Annars börjar sökningen i början av indatasträngen och flyttas åt höger.
Undantaget RegexMatchTimeoutException utlöses om körningstiden för ersättningsåtgärden överskrider det tidsgränsintervall som angetts för programdomänen där metoden anropas. Om ingen tidsgräns har definierats i programdomänens egenskaper, eller om tidsgränsvärdet är Regex.InfiniteMatchTimeout, genereras inget undantag.
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Se även
Gäller för
Replace(String, String, Int32, Int32)
I en angiven indatadelsträng ersätter ett angivet maximalt antal strängar som matchar ett mönster för reguljära uttryck med en angiven ersättningssträng.
public:
System::String ^ Replace(System::String ^ input, System::String ^ replacement, int count, int startat);
public string Replace(string input, string replacement, int count, int startat);
member this.Replace : string * string * int * int -> string
Public Function Replace (input As String, replacement As String, count As Integer, startat As Integer) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- replacement
- String
Ersättningssträngen.
- count
- Int32
Maximalt antal gånger ersättningen kan ske.
- startat
- Int32
Teckenpositionen i indatasträngen där sökningen börjar.
Returer
En ny sträng som är identisk med indatasträngen, förutom att ersättningssträngen ersätter varje matchad sträng. Om mönstret för reguljära uttryck inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
input eller replacement är null.
startat är mindre än noll eller större än längden på input.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande exempel dubblas alla utom den första raden i en sträng. Den definierar ett mönster för reguljära uttryck, ^.*$, som matchar en textrad, anropar Match(String) metoden för att matcha den första raden i strängen och använder Match.Index egenskaperna och Match.Count för att fastställa startpositionen för den andra raden.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "Instantiating a New Type\n" +
"Generally, there are two ways that an\n" +
"instance of a class or structure can\n" +
"be instantiated. ";
string pattern = "^.*$";
string replacement = "\n$&";
Regex rgx = new Regex(pattern, RegexOptions.Multiline);
string result = String.Empty;
Match match = rgx.Match(input);
// Double space all but the first line.
if (match.Success)
result = rgx.Replace(input, replacement, -1, match.Index + match.Length + 1);
Console.WriteLine(result);
}
}
// The example displays the following output:
// Instantiating a New Type
//
// Generally, there are two ways that an
//
// instance of a class or structure can
//
// be instntiated.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "Instantiating a New Type" + vbCrLf + _
"Generally, there are two ways that an" + vbCrLf + _
"instance of a class or structure can" + vbCrLf + _
"be instantiated. "
Dim pattern As String = "^.*$"
Dim replacement As String = vbCrLf + "$&"
Dim rgx As New Regex(pattern, RegexOptions.Multiline)
Dim result As String = String.Empty
Dim match As Match = rgx.Match(input)
' Double space all but the first line.
If match.Success Then
result = rgx.Replace(input, replacement, -1, match.Index + match.Length + 1)
End If
Console.WriteLine(result)
End Sub
End Module
' The example displays the following output:
' Instantiating a New Type
'
' Generally, there are two ways that an
'
' instance of a class or structure can
'
' be instntiated.
Mönster för ^.*$ reguljära uttryck definieras enligt följande tabell.
| Mönster | Description |
|---|---|
^ |
Matcha början av en rad. (Observera att Regex objektet instansierades med hjälp RegexOptions.Multiline av alternativet. Annars skulle den här teckenklassen endast matcha början av indatasträngen.) |
.* |
Matcha alla tecken noll eller fler gånger. |
$ |
Matcha slutet av en rad. (Observera att Regex objektet instansierades med hjälp RegexOptions.Multiline av alternativet. Annars skulle den här teckenklassen endast matcha början av indatasträngen.) |
Ersättningssträngen (vbCrLf + "$&" i Visual Basic, "\n$&" i C#) lägger till en ny rad före den matchade strängen. Observera att \n C#-exemplet tolkas som det nya radtecknet av C#-kompilatorn. Det representerar inte ett reguljärt uttryck.
Kommentarer
Sökningen efter matchningar startar i strängen input vid den position som anges av parametern startat . Det reguljära uttrycket är det mönster som definieras av konstruktorn för det aktuella Regex objektet. Om count är negativt fortsätter ersättningarna till slutet av strängen. Om count överskrider antalet matchningar ersätts alla matchningar.
Mer information om startatfinns i avsnittet Kommentarer i Match(String, Int32).
Parametern replacement anger den sträng som ska ersätta varje matchning i input.
replacement kan bestå av valfri kombination av literaltext och ersättningar. Ersättningsmönstret a*${test}b infogar till exempel strängen "a*" följt av den delsträng som matchas av den test eventuella insamlingsgruppen följt av strängen "b". *-tecknet identifieras inte som ett metakarakter i ett ersättningsmönster.
Note
Substitutioner är de enda språkelementen för reguljära uttryck som identifieras i ett ersättningsmönster. Alla andra språkelement för reguljära uttryck, inklusive teckenutrymningar, tillåts endast i reguljära uttrycksmönster och identifieras inte i ersättningsmönster.
Undantaget RegexMatchTimeoutException utlöses om körningstiden för ersättningsåtgärden överskrider det tidsgränsintervall som anges av Regex.Regex(String, RegexOptions, TimeSpan) konstruktorn. Om du inte anger ett tidsgränsintervall när du anropar konstruktorn utlöses undantaget om åtgärden överskrider ett timeout-värde som har upprättats för programdomänen Regex där objektet skapas. Om ingen tidsgräns har definierats i konstruktoranropet Regex eller i programdomänens egenskaper, eller om tidsgränsvärdet är Regex.InfiniteMatchTimeout, genereras inget undantag
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Se även
Gäller för
Replace(String, String, String, RegexOptions)
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en angiven ersättningssträng. Angivna alternativ ändrar matchningsåtgärden.
public:
static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::String ^ replacement, System::Text::RegularExpressions::RegexOptions options);
public static string Replace(string input, string pattern, string replacement, System.Text.RegularExpressions.RegexOptions options);
static member Replace : string * string * string * System.Text.RegularExpressions.RegexOptions -> string
Public Shared Function Replace (input As String, pattern As String, replacement As String, options As RegexOptions) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- pattern
- String
Det reguljära uttrycksmönster som ska matchas.
- replacement
- String
Ersättningssträngen.
- options
- RegexOptions
En bitvis kombination av uppräkningsvärdena som ger alternativ för matchning.
Returer
En ny sträng som är identisk med indatasträngen, förutom att ersättningssträngen ersätter varje matchad sträng. Om pattern inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
Ett fel uppstod vid parsning av reguljära uttryck.
input, pattern, eller replacement är null.
options är inte en giltig bitvis kombination av RegexOptions värden.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande exempel används Replace(String, String, String, RegexOptions) metoden för att ersätta den lokala datorn och enhetsnamnen i en UNC-sökväg med en lokal filsökväg. Det reguljära uttrycket använder Environment.MachineName egenskapen för att inkludera namnet på den lokala datorn och Environment.GetLogicalDrives metoden för att inkludera namnen på de logiska enheterna. Alla jämförelser av reguljära uttryckssträngar är skiftlägesokänsliga. Om du vill köra exemplet bör du ersätta strängen "MyMachine" med namnet på den lokala datorn.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
// Get drives available on local computer and form into a single character expression.
string[] drives = Environment.GetLogicalDrives();
string driveNames = String.Empty;
foreach (string drive in drives)
driveNames += drive.Substring(0,1);
// Create regular expression pattern dynamically based on local machine information.
string pattern = @"\\\\" + Environment.MachineName + @"(?:\.\w+)*\\([" + driveNames + @"])\$";
string replacement = "$1:";
string[] uncPaths = { @"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt",
@"\\MyMachine\c$\ThingsToDo.txt",
@"\\MyMachine\d$\documents\mydocument.docx" };
foreach (string uncPath in uncPaths)
{
Console.WriteLine("Input string: " + uncPath);
Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement, RegexOptions.IgnoreCase));
Console.WriteLine();
}
}
}
// The example displays the following output if run on a machine whose name is
// MyMachine:
// Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
// Returned string: C:\ThingsToDo.txt
//
// Input string: \\MyMachine\c$\ThingsToDo.txt
// Returned string: c:\ThingsToDo.txt
//
// Input string: \\MyMachine\d$\documents\mydocument.docx
// Returned string: d:\documents\mydocument.docx
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
' Get drives available on local computer and form into a single character expression.
Dim drives() As String = Environment.GetLogicalDrives()
Dim driveNames As String = Nothing
For Each drive As String In drives
driveNames += drive.Substring(0,1)
Next
' Create regular expression pattern dynamically based on local machine information.
Dim pattern As String = "\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"
Dim replacement As String = "$1:"
Dim uncPaths() AS String = {"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", _
"\\MyMachine\c$\ThingsToDo.txt", _
"\\MyMachine\d$\documents\mydocument.docx" }
For Each uncPath As String In uncPaths
Console.WriteLine("Input string: " + uncPath)
Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement, RegexOptions.IgnoreCase))
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output if run on a machine whose name is
' MyMachine:
' Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
' Returned string: C:\ThingsToDo.txt
'
' Input string: \\MyMachine\c$\ThingsToDo.txt
' Returned string: c:\ThingsToDo.txt
'
' Input string: \\MyMachine\d$\documents\mydocument.docx
' Returned string: d:\documents\mydocument.docx
Mönstret för reguljära uttryck definieras av följande uttryck:
"\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"
I följande tabell visas hur mönstret för reguljära uttryck tolkas.
| Mönster | Description |
|---|---|
\\\\ |
Matcha två på varandra följande omvänt snedstreck (\) tecken. Eftersom omvänt snedstreck tolkas som escape-tecknet måste varje omvänt snedstreck undvikas med ett annat omvänt snedstreck. |
+ Environment.MachineName + |
Matcha strängen som returneras av egenskapen Environment.MachineName . |
(?:\.\w+)* |
Matcha punkttecknet (.) följt av ett eller flera ordtecken. Den här matchning kan inträffa noll eller fler gånger. Den matchade underuttrycket registreras inte. |
\\ |
Matcha ett omvänt snedstreck (\) tecken. |
([" + driveNames + "]) |
Matcha teckenklassen som består av de enskilda enhetsbeteckningarna. Den här matchningen är den första insamlade subexpressionen. |
\$ |
Matcha teckentecknet för literal dollar ($). |
Ersättningsmönstret $1 ersätter hela matchningen med den första insamlade subexpressionen. Det vill: den ersätter UNC-datorn och enhetsnamnet med enhetsbeteckningen.
Kommentarer
De statiska Replace metoderna motsvarar konstruera ett Regex objekt med det angivna reguljära uttrycksmönstret och anropa instansmetoden Replace.
Parametern pattern består av reguljära uttrycksspråkelement som symboliskt beskriver strängen som ska matchas. Mer information om reguljära uttryck finns i .NET reguljära uttryck och Regular Expression Language – Snabbreferens. Om du anger RightToLeft parametern options börjar sökningen efter matchningar i slutet av indatasträngen och flyttas åt vänster. Annars börjar sökningen i början av indatasträngen och flyttas åt höger.
Parametern replacement anger den sträng som ska ersätta varje matchning i input.
replacement kan bestå av valfri kombination av literaltext och ersättningar. Ersättningsmönstret a*${test}b infogar till exempel strängen "a*" följt av den delsträng som matchas av den test eventuella insamlingsgruppen följt av strängen "b". *-tecknet identifieras inte som ett metakarakter i ett ersättningsmönster.
Note
Substitutioner är de enda språkelementen för reguljära uttryck som identifieras i ett ersättningsmönster. Alla andra språkelement för reguljära uttryck, inklusive teckenutrymningar, tillåts endast i reguljära uttrycksmönster och identifieras inte i ersättningsmönster.
Undantaget RegexMatchTimeoutException utlöses om körningstiden för ersättningsåtgärden överskrider det tidsgränsintervall som angetts för programdomänen där metoden anropas. Om ingen tidsgräns har definierats i programdomänens egenskaper, eller om tidsgränsvärdet är Regex.InfiniteMatchTimeout, genereras inget undantag.
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Anteckningar till anropare
Den här metoden överskrider tidsgränsen efter ett intervall som är lika med standardvärdet för timeout för den programdomän där den anropas. Om ett timeout-värde inte har definierats för programdomänen används värdet InfiniteMatchTimeout, som förhindrar att metoden överskrider tidsgränsen. Den rekommenderade statiska metoden för att ersätta en mönstermatchning är Replace(String, String, String, RegexOptions, TimeSpan), vilket gör att du kan ange tidsgränsintervallet.
Se även
Gäller för
Replace(String, String, MatchEvaluator)
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en sträng som returneras av ett MatchEvaluator ombud.
public:
static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::MatchEvaluator ^ evaluator);
public static string Replace(string input, string pattern, System.Text.RegularExpressions.MatchEvaluator evaluator);
static member Replace : string * string * System.Text.RegularExpressions.MatchEvaluator -> string
Public Shared Function Replace (input As String, pattern As String, evaluator As MatchEvaluator) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- pattern
- String
Det reguljära uttrycksmönster som ska matchas.
- evaluator
- MatchEvaluator
En anpassad metod som undersöker varje matchning och returnerar antingen den ursprungliga matchade strängen eller en ersättningssträng.
Returer
En ny sträng som är identisk med indatasträngen, förutom att en ersättningssträng ersätter varje matchad sträng. Om pattern inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
Ett fel uppstod vid parsning av reguljära uttryck.
input, pattern, eller evaluator är null.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande exempel används ett reguljärt uttryck för att extrahera enskilda ord från en sträng och använder sedan ett MatchEvaluator ombud för att anropa en metod med namnet WordScramble som förvränger de enskilda bokstäverna i ordet. För att göra detta WordScramble skapar metoden en matris som innehåller tecknen i matchningen. Den skapar också en parallell matris som fylls i med slumpmässiga flyttalsnummer. Matriserna sorteras genom att anropa Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) metoden och den sorterade matrisen tillhandahålls som ett argument till en String klasskonstruktor. Den här nyskapade strängen WordScramble returneras sedan av metoden . Det reguljära uttrycksmönstret \w+ matchar ett eller flera ordtecken. Motorn för reguljära uttryck fortsätter att lägga till tecken i matchningen tills det stöter på ett icke-ordtecken, till exempel ett blankstegstecken.
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+";
MatchEvaluator evaluator = new MatchEvaluator(WordScrambler);
Console.WriteLine("Original words:");
Console.WriteLine(words);
Console.WriteLine();
Console.WriteLine("Scrambled words:");
Console.WriteLine(Regex.Replace(words, pattern, evaluator));
}
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:
// elrtte iaeabatlpchl igmnssi lcka aerslee hnpatnce ksacl lialcryc dylruna ecase
Imports System.Collections
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim words As String = "letter alphabetical missing lack release " + _
"penchant slack acryllic laundry cease"
Dim pattern As String = "\w+"
Dim evaluator As MatchEvaluator = AddressOf WordScrambler
Console.WriteLine("Original words:")
Console.WriteLine(words)
Console.WriteLine("Scrambled words:")
Console.WriteLine(Regex.Replace(words, pattern, evaluator))
End Sub
Public Function WordScrambler(match As Match) As String
Dim arraySize As Integer = match.Value.Length - 1
' Define two arrays equal to the number of letters in the match.
Dim keys(arraySize) As Double
Dim letters(arraySize) As Char
' Instantiate random number generator'
Dim rnd As New Random()
For ctr As Integer = 0 To match.Value.Length - 1
' Populate the array of keys with random numbers.
keys(ctr) = rnd.NextDouble()
' Assign letter to array of letters.
letters(ctr) = match.Value.Chars(ctr)
Next
Array.Sort(keys, letters, 0, arraySize, Comparer.Default)
Return New String(letters)
End Function
End Module
' The example displays output similar to the following:
' Original words:
' letter alphabetical missing lack release penchant slack acryllic laundry cease
'
' Scrambled words:
' elrtte iaeabatlpchl igmnssi lcka aerslee hnpatnce ksacl lialcryc dylruna ecase
Kommentarer
Metoden Regex.Replace(String, String, MatchEvaluator) är användbar för att ersätta en reguljär uttrycksmatchning om något av följande villkor är sant:
Ersättningssträngen kan inte enkelt anges med ett ersättningsmönster för reguljära uttryck.
Ersättningssträngen är resultatet av viss bearbetning som utförts på den matchade strängen.
Ersättningssträngen är resultatet av villkorsstyrd bearbetning.
Metoden motsvarar att anropa Regex.Matches(String, String) metoden och skicka varje Match objekt i den returnerade MatchCollection samlingen till ombudet evaluator .
Parametern pattern består av reguljära uttrycksspråkelement som symboliskt beskriver strängen som ska matchas. Mer information om reguljära uttryck finns i .NET reguljära uttryck och Regular Expression Language – Snabbreferens.
Parametern evaluator är ombudet för en anpassad metod som du definierar och som undersöker varje matchning. Den anpassade metoden måste ha följande signatur för att matcha ombudet MatchEvaluator .
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Din anpassade metod returnerar en sträng som ersätter de matchade indata.
Undantaget RegexMatchTimeoutException utlöses om körningstiden för ersättningsåtgärden överskrider det tidsgränsintervall som angetts för programdomänen där metoden anropas. Om ingen tidsgräns har definierats i programdomänens egenskaper, eller om tidsgränsvärdet är Regex.InfiniteMatchTimeout, genereras inget undantag.
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Anteckningar till anropare
Den här metoden överskrider tidsgränsen efter ett intervall som är lika med standardvärdet för timeout för den programdomän där den anropas. Om ett timeout-värde inte har definierats för programdomänen används värdet InfiniteMatchTimeout, som förhindrar att metoden överskrider tidsgränsen. Den rekommenderade statiska metoden för att utvärdera och ersätta en mönstermatchning är Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan), vilket gör att du kan ange tidsgränsintervallet.
Se även
Gäller för
Replace(String, String, String)
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en angiven ersättningssträng.
public:
static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::String ^ replacement);
public static string Replace(string input, string pattern, string replacement);
static member Replace : string * string * string -> string
Public Shared Function Replace (input As String, pattern As String, replacement As String) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- pattern
- String
Det reguljära uttrycksmönster som ska matchas.
- replacement
- String
Ersättningssträngen.
Returer
En ny sträng som är identisk med indatasträngen, förutom att ersättningssträngen ersätter varje matchad sträng. Om pattern inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
Ett fel uppstod vid parsning av reguljära uttryck.
input, pattern, eller replacement är null.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande exempel definieras ett reguljärt uttryck, \s+, som matchar ett eller flera blankstegstecken. Ersättningssträngen , " ", ersätter dem med ett enda blankstegstecken.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "This is text with far too much " +
"white space.";
string pattern = "\\s+";
string replacement = " ";
string result = Regex.Replace(input, pattern, replacement);
Console.WriteLine("Original String: {0}", input);
Console.WriteLine("Replacement String: {0}", result);
}
}
// The example displays the following output:
// Original String: This is text with far too much white space.
// Replacement String: This is text with far too much white space.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "This is text with far too much " + _
"white space."
Dim pattern As String = "\s+"
Dim replacement As String = " "
Dim result As String = Regex.Replace(input, pattern, replacement)
Console.WriteLine("Original String: {0}", input)
Console.WriteLine("Replacement String: {0}", result)
End Sub
End Module
' The example displays the following output:
' Original String: This is text with far too much white space.
' Replacement String: This is text with far too much white space.
I följande exempel används Replace(String, String, String) metoden för att ersätta den lokala datorn och enhetsnamnen i en UNC-sökväg med en lokal filsökväg. Det reguljära uttrycket använder Environment.MachineName egenskapen för att inkludera namnet på den lokala datorn och Environment.GetLogicalDrives metoden för att inkludera namnen på de logiska enheterna. Om du vill köra exemplet bör du ersätta strängen "MyMachine" med namnet på den lokala datorn.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
// Get drives available on local computer and form into a single character expression.
string[] drives = Environment.GetLogicalDrives();
string driveNames = String.Empty;
foreach (string drive in drives)
driveNames += drive.Substring(0,1);
// Create regular expression pattern dynamically based on local machine information.
string pattern = @"\\\\(?i:" + Environment.MachineName + @")(?:\.\w+)*\\((?i:[" + driveNames + @"]))\$";
string replacement = "$1:";
string[] uncPaths = { @"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt",
@"\\MyMachine\c$\ThingsToDo.txt",
@"\\MyMachine\d$\documents\mydocument.docx" };
foreach (string uncPath in uncPaths)
{
Console.WriteLine("Input string: " + uncPath);
Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement));
Console.WriteLine();
}
}
}
// The example displays the following output if run on a machine whose name is
// MyMachine:
// Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
// Returned string: C:\ThingsToDo.txt
//
// Input string: \\MyMachine\c$\ThingsToDo.txt
// Returned string: c:\ThingsToDo.txt
//
// Input string: \\MyMachine\d$\documents\mydocument.docx
// Returned string: d:\documents\mydocument.docx
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
' Get drives available on local computer and form into a single character expression.
Dim drives() As String = Environment.GetLogicalDrives()
Dim driveNames As String = Nothing
For Each drive As String In drives
driveNames += drive.Substring(0,1)
Next
' Create regular expression pattern dynamically based on local machine information.
Dim pattern As String = "\\\\(?i:" + Environment.MachineName + ")(?:\.\w+)*\\((?i:[" + driveNames + "]))\$"
Dim replacement As String = "$1:"
Dim uncPaths() AS String = {"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", _
"\\MyMachine\c$\ThingsToDo.txt", _
"\\MyMachine\d$\documents\mydocument.docx" }
For Each uncPath As String In uncPaths
Console.WriteLine("Input string: " + uncPath)
Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement))
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output if run on a machine whose name is
' MyMachine:
' Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
' Returned string: C:\ThingsToDo.txt
'
' Input string: \\MyMachine\c$\ThingsToDo.txt
' Returned string: c:\ThingsToDo.txt
'
' Input string: \\MyMachine\d$\documents\mydocument.docx
' Returned string: d:\documents\mydocument.docx
Mönstret för reguljära uttryck definieras av följande uttryck:
"\\\\(?i:" + Environment.MachineName + ")(?:\.\w+)*\\((?i:[" + driveNames + "]))\$"
I följande tabell visas hur mönstret för reguljära uttryck tolkas.
| Mönster | Description |
|---|---|
\\\\ |
Matcha två på varandra följande omvänt snedstreck (\) tecken. Eftersom omvänt snedstreck tolkas som escape-tecknet måste varje omvänt snedstreck undvikas med ett annat omvänt snedstreck. |
(?i:" + Environment.MachineName + ") |
Utför en skiftlägeskänslig matchning av strängen som returneras av Environment.MachineName egenskapen. |
(?:\.\w+)* |
Matcha punkttecknet (.) följt av ett eller flera ordtecken. Den här matchning kan inträffa noll eller fler gånger. Den matchade underuttrycket registreras inte. |
\\ |
Matcha ett omvänt snedstreck (\) tecken. |
((?i:[" + driveNames + "])) |
Utför en skiftlägeskänslig matchning av teckenklassen som består av de enskilda enhetsbeteckningarna. Den här matchningen är den första insamlade subexpressionen. |
\$ |
Matcha teckentecknet för literal dollar ($). |
Ersättningsmönstret $1 ersätter hela matchningen med den första insamlade subexpressionen. Det vill: den ersätter UNC-datorn och enhetsnamnet med enhetsbeteckningen.
Kommentarer
De statiska Replace metoderna motsvarar konstruera ett Regex objekt med det angivna reguljära uttrycksmönstret och anropa instansmetoden Replace.
Parametern pattern består av reguljära uttrycksspråkelement som symboliskt beskriver strängen som ska matchas. Mer information om reguljära uttryck finns i .NET reguljära uttryck och Regular Expression Language – Snabbreferens. Sökningen efter matchningar börjar i början av strängen input .
Parametern replacement anger den sträng som ska ersätta varje matchning i input.
replacement kan bestå av valfri kombination av literaltext och ersättningar. Ersättningsmönstret a*${test}b infogar till exempel strängen "a*" följt av den delsträng som matchas av den test eventuella insamlingsgruppen följt av strängen "b". *-tecknet identifieras inte som ett metakarakter i ett ersättningsmönster.
Note
Substitutioner är de enda språkelementen för reguljära uttryck som identifieras i ett ersättningsmönster. Alla andra språkelement för reguljära uttryck, inklusive teckenutrymningar, tillåts endast i reguljära uttrycksmönster och identifieras inte i ersättningsmönster.
Undantaget RegexMatchTimeoutException utlöses om körningstiden för ersättningsåtgärden överskrider det tidsgränsintervall som angetts för programdomänen där metoden anropas. Om ingen tidsgräns har definierats i programdomänens egenskaper, eller om tidsgränsvärdet är Regex.InfiniteMatchTimeout, genereras inget undantag.
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Anteckningar till anropare
Den här metoden överskrider tidsgränsen efter ett intervall som är lika med standardvärdet för timeout för den programdomän där den anropas. Om ett timeout-värde inte har definierats för programdomänen används värdet InfiniteMatchTimeout, som förhindrar att metoden överskrider tidsgränsen. Den rekommenderade statiska metoden för att ersätta en mönstermatchning är Replace(String, String, String, RegexOptions, TimeSpan), vilket gör att du kan ange tidsgränsintervallet.
Se även
Gäller för
Replace(String, String, Int32)
I en angiven indatasträng ersätter ett angivet maximalt antal strängar som matchar ett mönster för reguljära uttryck med en angiven ersättningssträng.
public:
System::String ^ Replace(System::String ^ input, System::String ^ replacement, int count);
public string Replace(string input, string replacement, int count);
member this.Replace : string * string * int -> string
Public Function Replace (input As String, replacement As String, count As Integer) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- replacement
- String
Ersättningssträngen.
- count
- Int32
Det maximala antalet gånger som ersättningen kan ske.
Returer
En ny sträng som är identisk med indatasträngen, förutom att ersättningssträngen ersätter varje matchad sträng. Om mönstret för reguljära uttryck inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
input eller replacement är null.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande exempel ersätts de första fem förekomsterna av duplicerade tecken med ett enda tecken. Mönster för (\w)\1 reguljära uttryck matchar efterföljande förekomster av ett enskilt tecken och tilldelar den första förekomsten till den första insamlingsgruppen. Ersättningsmönstret $1 ersätter hela matchningen med den första insamlade gruppen.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string str = "aabccdeefgghiijkklmm";
string pattern = "(\\w)\\1";
string replacement = "$1";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(str, replacement, 5);
Console.WriteLine("Original String: '{0}'", str);
Console.WriteLine("Replacement String: '{0}'", result);
}
}
// The example displays the following output:
// Original String: 'aabccdeefgghiijkklmm'
// Replacement String: 'abcdefghijkklmm'
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim str As String = "aabccdeefgghiijkklmm"
Dim pattern As String = "(\w)\1"
Dim replacement As String = "$1"
Dim rgx As New Regex(pattern)
Dim result As String = rgx.Replace(str, replacement, 5)
Console.WriteLine("Original String: '{0}'", str)
Console.WriteLine("Replacement String: '{0}'", result)
End Sub
End Module
' The example displays the following output:
' Original String: 'aabccdeefgghiijkklmm'
' Replacement String: 'abcdefghijkklmm'
Kommentarer
Sökningen efter matchningar börjar i början av strängen input . Det reguljära uttrycket är det mönster som definieras av konstruktorn för det aktuella Regex objektet. Om count är negativt fortsätter ersättningarna till slutet av strängen. Om count överskrider antalet matchningar ersätts alla matchningar.
Parametern replacement anger den sträng som ska ersätta de första count matchningarna i input.
replacement kan bestå av valfri kombination av literaltext och ersättningar. Ersättningsmönstret a*${test}b infogar till exempel strängen "a*" följt av den delsträng som matchas av den test eventuella insamlingsgruppen följt av strängen "b". *-tecknet identifieras inte som ett metakarakter i ett ersättningsmönster.
Note
Substitutioner är de enda språkelementen för reguljära uttryck som identifieras i ett ersättningsmönster. Alla andra språkelement för reguljära uttryck, inklusive teckenutrymningar, tillåts endast i reguljära uttrycksmönster och identifieras inte i ersättningsmönster.
Undantaget RegexMatchTimeoutException utlöses om körningstiden för ersättningsåtgärden överskrider det tidsgränsintervall som anges av Regex.Regex(String, RegexOptions, TimeSpan) konstruktorn. Om du inte anger ett tidsgränsintervall när du anropar konstruktorn utlöses undantaget om åtgärden överskrider ett timeout-värde som har upprättats för programdomänen Regex där objektet skapas. Om ingen tidsgräns har definierats i konstruktoranropet Regex eller i programdomänens egenskaper, eller om tidsgränsvärdet är Regex.InfiniteMatchTimeout, genereras inget undantag
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Se även
Gäller för
Replace(String, MatchEvaluator)
I en angiven indatasträng ersätter alla strängar som matchar ett angivet reguljärt uttryck med en sträng som returneras av ett MatchEvaluator ombud.
public:
System::String ^ Replace(System::String ^ input, System::Text::RegularExpressions::MatchEvaluator ^ evaluator);
public string Replace(string input, System.Text.RegularExpressions.MatchEvaluator evaluator);
member this.Replace : string * System.Text.RegularExpressions.MatchEvaluator -> string
Public Function Replace (input As String, evaluator As MatchEvaluator) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- evaluator
- MatchEvaluator
En anpassad metod som undersöker varje matchning och returnerar antingen den ursprungliga matchade strängen eller en ersättningssträng.
Returer
En ny sträng som är identisk med indatasträngen, förutom att en ersättningssträng ersätter varje matchad sträng. Om mönstret för reguljära uttryck inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
input eller evaluator är null.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande kodexempel visas en originalsträng, matchar varje ord i den ursprungliga strängen, konverterar det första tecknet för varje matchning till versaler och visar sedan den konverterade strängen.
using System;
using System.Text.RegularExpressions;
class RegExSample
{
static string CapText(Match m)
{
// Get the matched string.
string x = m.ToString();
// If the first char is lower case...
if (char.IsLower(x[0]))
{
// Capitalize it.
return char.ToUpper(x[0]) + x.Substring(1, x.Length - 1);
}
return x;
}
static void Main()
{
string text = "four score and seven years ago";
Console.WriteLine($"text=[{text}]");
Regex rx = new Regex(@"\w+");
string result = rx.Replace(text, new MatchEvaluator(RegExSample.CapText));
Console.WriteLine($"result=[{result}]");
}
}
// The example displays the following output:
// text=[four score and seven years ago]
// result=[Four Score And Seven Years Ago]
Imports System.Text.RegularExpressions
Module RegExSample
Function CapText(ByVal m As Match) As String
' Get the matched string.
Dim x As String = m.ToString()
' If the first char is lower case...
If Char.IsLower(x.Chars(0)) Then
' Capitalize it.
Return Char.ToUpper(x.Chars(0)) & x.Substring(1, x.Length - 1)
End If
Return x
End Function
Sub Main()
Dim text As String = "four score and seven years ago"
Console.WriteLine($"text=[{text}]")
Dim rx As New Regex("\w+")
Dim result As String = rx.Replace(text, AddressOf RegExSample.CapText)
Console.WriteLine($"result=[{result}]")
End Sub
End Module
' The example displays the following output:
' text=[four score and seven years ago]
' result=[Four Score And Seven Years Ago]
Kommentarer
Metoden Regex.Replace(String, MatchEvaluator) är användbar för att ersätta en reguljär uttrycksmatchning om något av följande villkor är sant:
Ersättningssträngen kan inte enkelt anges med ett ersättningsmönster för reguljära uttryck.
Ersättningssträngen är resultatet av viss bearbetning som utförts på den matchade strängen.
Ersättningssträngen är resultatet av villkorsstyrd bearbetning.
Metoden motsvarar att anropa Regex.Matches(String) metoden och skicka varje Match objekt i den returnerade MatchCollection samlingen till ombudet evaluator .
Det reguljära uttrycket är det mönster som definieras av konstruktorn för det aktuella Regex objektet.
Parametern evaluator är ombudet för en anpassad metod som du definierar och som undersöker varje matchning. Den anpassade metoden måste ha följande signatur för att matcha ombudet MatchEvaluator .
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Din anpassade metod returnerar en sträng som ersätter de matchade indata.
Undantaget RegexMatchTimeoutException utlöses om körningstiden för ersättningsåtgärden överskrider det tidsgränsintervall som anges av Regex.Regex(String, RegexOptions, TimeSpan) konstruktorn. Om du inte anger ett tidsgränsintervall när du anropar konstruktorn utlöses undantaget om åtgärden överskrider ett timeout-värde som har upprättats för programdomänen Regex där objektet skapas. Om ingen tidsgräns har definierats i konstruktoranropet Regex eller i programdomänens egenskaper, eller om tidsgränsvärdet är Regex.InfiniteMatchTimeout, genereras inget undantag
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Se även
Gäller för
Replace(String, String)
I en angiven indatasträng ersätter alla strängar som matchar ett mönster för reguljära uttryck med en angiven ersättningssträng.
public:
System::String ^ Replace(System::String ^ input, System::String ^ replacement);
public string Replace(string input, string replacement);
member this.Replace : string * string -> string
Public Function Replace (input As String, replacement As String) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- replacement
- String
Ersättningssträngen.
Returer
En ny sträng som är identisk med indatasträngen, förutom att ersättningssträngen ersätter varje matchad sträng. Om mönstret för reguljära uttryck inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
input eller replacement är null.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande exempel definieras ett reguljärt uttryck, \s+, som matchar ett eller flera blankstegstecken. Ersättningssträngen , " ", ersätter dem med ett enda blankstegstecken.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "This is text with far too much " +
"white space.";
string pattern = "\\s+";
string replacement = " ";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
Console.WriteLine("Original String: {0}", input);
Console.WriteLine("Replacement String: {0}", result);
}
}
// The example displays the following output:
// Original String: This is text with far too much white space.
// Replacement String: This is text with far too much white space.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "This is text with far too much " + _
"white space."
Dim pattern As String = "\s+"
Dim replacement As String = " "
Dim rgx As New Regex(pattern)
Dim result As String = rgx.Replace(input, replacement)
Console.WriteLine("Original String: {0}", input)
Console.WriteLine("Replacement String: {0}", result)
End Sub
End Module
' The example displays the following output:
' Original String: This is text with far too much white space.
' Replacement String: This is text with far too much white space.
I följande exempel definieras ett reguljärt uttryck, (\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})?, och ett ersättningsmönster, $2, som tar bort antingen en inledande eller en avslutande valutasymbol från ett numeriskt värde.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})?";
string input = "$17.43 €2 16.33 £0.98 0.43 £43 12€ 17";
string replacement = "$2";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
Console.WriteLine("Original String: '{0}'", input);
Console.WriteLine("Replacement String: '{0}'", result);
}
}
// The example displays the following output:
// Original String: '$17.43 €2 16.33 £0.98 0.43 £43 12€ 17'
// Replacement String: '17.43 2 16.33 0.98 0.43 43 12 17'
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "(\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})?"
Dim input As String = "$17.43 €2 16.33 £0.98 0.43 £43 12€ 17"
Dim replacement As String = "$2"
Dim rgx As New Regex(pattern)
Dim result As String = rgx.Replace(input, replacement)
Console.WriteLine("Original String: '{0}'", input)
Console.WriteLine("Replacement String: '{0}'", result)
End Sub
End Module
' The example displays the following output:
' Original String: '$17.43 €2 16.33 £0.98 0.43 £43 12€ 17'
' Replacement String: '17.43 2 16.33 0.98 0.43 43 12 17'
Det reguljära uttrycket tolkas som det visas i följande tabell.
| Mönster | Description |
|---|---|
\p{Sc} |
Matcha en valutasymbol.
{Sc} anger alla tecken som är medlemmar i kategorin Unicode-symbol, valuta. |
\s? |
Matcha noll eller ett vitt tecken. |
(\p{Sc}\s?)? |
Matcha noll eller en förekomst av kombinationen av en valutasymbol följt av noll eller ett blankstegstecken. Det här är den första fångstgruppen. |
\d+ |
Matcha en eller flera decimaler. |
\.? |
Matcha noll eller en förekomst av en period (används som decimaltecken). |
((?<=\.)\d+)? |
Om en punkt är det föregående tecknet matchar du en eller flera decimalsiffror. Det här mönstret kan matchas antingen noll eller en gång. |
(\d+\.?((?<=\.)\d+)?) |
Matcha mönstret för en eller flera decimaler följt av en valfri period och ytterligare decimalsiffror. Det här är den andra fångstgruppen. Anropet Replace(String, String) till metoden ersätter hela matchningen med värdet för den här insamlade gruppen. |
(?(1)|\s?\p{Sc})? |
Om den första insamlade gruppen finns matchar du en tom sträng. Annars matchar du noll eller ett blankstegstecken följt av en valutasymbol. |
Kommentarer
Sökningen efter matchningar börjar i början av strängen input . Det reguljära uttrycket är det mönster som definieras av konstruktorn för det aktuella Regex objektet.
Parametern replacement anger den sträng som ska ersätta varje matchning i input.
replacement kan bestå av valfri kombination av literaltext och ersättningar. Ersättningsmönstret a*${test}b infogar till exempel strängen "a*" följt av den delsträng som matchas av den test eventuella insamlingsgruppen följt av strängen "b". *-tecknet identifieras inte som ett metakarakter i ett ersättningsmönster.
Note
Substitutioner är de enda språkelementen för reguljära uttryck som identifieras i ett ersättningsmönster. Alla andra språkelement för reguljära uttryck, inklusive teckenutrymningar, tillåts endast i reguljära uttrycksmönster och identifieras inte i ersättningsmönster.
Undantaget RegexMatchTimeoutException utlöses om körningstiden för ersättningsåtgärden överskrider det tidsgränsintervall som anges av Regex.Regex(String, RegexOptions, TimeSpan) konstruktorn. Om du inte anger ett tidsgränsintervall när du anropar konstruktorn utlöses undantaget om åtgärden överskrider ett timeout-värde som har upprättats för programdomänen Regex där objektet skapas. Om ingen tidsgräns har definierats i konstruktoranropet Regex eller i programdomänens egenskaper, eller om tidsgränsvärdet är Regex.InfiniteMatchTimeout, genereras inget undantag
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.
Se även
Gäller för
Replace(String, MatchEvaluator, Int32)
I en angiven indatasträng ersätter ett angivet maximalt antal strängar som matchar ett mönster för reguljära uttryck med en sträng som returneras av ett MatchEvaluator ombud.
public:
System::String ^ Replace(System::String ^ input, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, int count);
public string Replace(string input, System.Text.RegularExpressions.MatchEvaluator evaluator, int count);
member this.Replace : string * System.Text.RegularExpressions.MatchEvaluator * int -> string
Public Function Replace (input As String, evaluator As MatchEvaluator, count As Integer) As String
Parametrar
- input
- String
Strängen för att söka efter en matchning.
- evaluator
- MatchEvaluator
En anpassad metod som undersöker varje matchning och returnerar antingen den ursprungliga matchade strängen eller en ersättningssträng.
- count
- Int32
Det maximala antalet gånger som ersättningen sker.
Returer
En ny sträng som är identisk med indatasträngen, förutom att en ersättningssträng ersätter varje matchad sträng. Om mönstret för reguljära uttryck inte matchas i den aktuella instansen returnerar metoden den aktuella instansen oförändrad.
Undantag
input eller evaluator är null.
En timeout inträffade. Mer information om tidsgränser finns i avsnittet Kommentarer.
Exempel
I följande exempel används ett reguljärt uttryck för att avsiktligt felstava hälften av orden i en lista. Det använder det reguljära uttrycket \w*(ie|ei)\w* för att matcha ord som innehåller tecknen "ie" eller "ei". Den skickar den första halvan av matchande ord till ReverseLetter metoden, som i sin tur använder Replace(String, String, String, RegexOptions) metoden för att vända "i" och "e" i den matchade strängen. De återstående orden förblir oförändrade.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "deceive relieve achieve belief fierce receive";
string pattern = @"\w*(ie|ei)\w*";
Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
Console.WriteLine("Original string: " + input);
string result = rgx.Replace(input, new MatchEvaluator(Example.ReverseLetter),
input.Split(' ').Length / 2);
Console.WriteLine("Returned string: " + result);
}
static string ReverseLetter(Match match)
{
return Regex.Replace(match.Value, "([ie])([ie])", "$2$1",
RegexOptions.IgnoreCase);
}
}
// The example displays the following output:
// Original string: deceive relieve achieve belief fierce receive
// Returned string: decieve releive acheive belief fierce receive
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "deceive relieve achieve belief fierce receive"
Dim pattern As String = "\w*(ie|ei)\w*"
Dim rgx As New Regex(pattern, RegexOptions.IgnoreCase)
Console.WriteLine("Original string: " + input)
Dim result As String = rgx.Replace(input, AddressOf ReverseLetter,
input.Split(" "c).Length \ 2)
Console.WriteLine("Returned string: " + result)
End Sub
Public Function ReverseLetter(match As Match) As String
Return Regex.Replace(match.Value, "([ie])([ie])", "$2$1",
RegexOptions.IgnoreCase)
End Function
End Module
' The example displays the following output:
' Original string: deceive relieve achieve belief fierce receive
' Returned string: decieve releive acheive belief fierce receive
Det reguljära uttrycket \w*(ie|ei)\w* definieras enligt följande tabell.
| Mönster | Description |
|---|---|
\w* |
Matcha noll eller fler ordtecken. |
(ie|ei) |
Matcha antingen "ie" eller "ei". |
\w* |
Matcha noll eller fler ordtecken. |
Mönstret ([ie])([ie]) för reguljära uttryck i ReverseLetter metoden matchar det första "i" eller "e" i diftongen "ie" eller "ei" och tilldelar bokstaven till den första insamlingsgruppen. Den matchar det andra "i" eller "e" och tilldelar bokstaven till den andra insamlingsgruppen. De två tecknen återställs sedan genom att metoden anropas Replace(String, String, String) med ersättningsmönstret $2$1.
Kommentarer
Metoden Regex.Replace(String, MatchEvaluator, Int32) är användbar för att ersätta en reguljär uttrycksmatchning om något av följande villkor är sant:
Ersättningssträngen kan inte enkelt anges med ett ersättningsmönster för reguljära uttryck.
Ersättningssträngen är resultatet av viss bearbetning som utförts på den matchade strängen.
Ersättningssträngen är resultatet av villkorsstyrd bearbetning.
Metoden motsvarar att anropa Regex.Matches(String) metoden och skicka de förstaMatchcountobjekten i den returnerade MatchCollection samlingen till ombudetevaluator.
Det reguljära uttrycket är det mönster som definieras av konstruktorn för det aktuella Regex objektet.
Parametern evaluator är ombudet för en anpassad metod som du definierar och som undersöker varje matchning. Den anpassade metoden måste ha följande signatur för att matcha ombudet MatchEvaluator .
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Din anpassade metod returnerar en sträng som ersätter de matchade indata.
Undantaget RegexMatchTimeoutException utlöses om körningstiden för ersättningsåtgärden överskrider det tidsgränsintervall som anges av Regex.Regex(String, RegexOptions, TimeSpan) konstruktorn. Om du inte anger ett tidsgränsintervall när du anropar konstruktorn utlöses undantaget om åtgärden överskrider ett timeout-värde som har upprättats för programdomänen Regex där objektet skapas. Om ingen tidsgräns har definierats i konstruktoranropet Regex eller i programdomänens egenskaper, eller om tidsgränsvärdet är Regex.InfiniteMatchTimeout, genereras inget undantag
Eftersom metoden returnerar input oförändrad om det inte finns någon matchning kan du använda Object.ReferenceEquals metoden för att avgöra om metoden har gjort några ersättningar till indatasträngen.