Regex.Replace Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Belirtilen bir giriş dizesinde, normal ifade deseniyle eşleşen dizeleri belirtilen bir değiştirme dizesiyle değiştirir.
Aşırı Yüklemeler
Replace(String, MatchEvaluator, Int32, Int32) |
Belirtilen bir giriş alt dizesinde, normal ifade deseniyle eşleşen belirtilen en fazla sayıda dizeyi bir temsilci tarafından MatchEvaluator döndürülen bir dizeyle değiştirir. |
Replace(String, String, String) |
Belirtilen bir giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri belirtilen değiştirme dizesiyle değiştirir. |
Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan) |
Belirtilen giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm alt dizeleri bir temsilci tarafından MatchEvaluator döndürülen bir dizeyle değiştirir. Ek parametreler, eşleşen işlemi değiştiren seçenekleri ve eşleşme bulunamazsa zaman aşımı aralığını belirtir. |
Replace(String, String, MatchEvaluator, RegexOptions) |
Belirtilen giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri bir temsilci tarafından MatchEvaluator döndürülen bir dizeyle değiştirir. Belirtilen seçenekler eşleşen işlemi değiştirir. |
Replace(String, String, String, RegexOptions, TimeSpan) |
Belirtilen bir giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri belirtilen değiştirme dizesiyle değiştirir. Ek parametreler, eşleşen işlemi değiştiren seçenekleri ve eşleşme bulunamazsa zaman aşımı aralığını belirtir. |
Replace(String, String, String, RegexOptions) |
Belirtilen bir giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri belirtilen değiştirme dizesiyle değiştirir. Belirtilen seçenekler eşleşen işlemi değiştirir. |
Replace(String, MatchEvaluator) |
Belirtilen giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri bir temsilci tarafından MatchEvaluator döndürülen bir dizeyle değiştirir. |
Replace(String, MatchEvaluator, Int32) |
Belirtilen giriş dizesinde, normal ifade deseniyle eşleşen belirtilen en fazla sayıda dizeyi bir temsilci tarafından MatchEvaluator döndürülen bir dizeyle değiştirir. |
Replace(String, String, MatchEvaluator) |
Belirtilen giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri bir temsilci tarafından MatchEvaluator döndürülen bir dizeyle değiştirir. |
Replace(String, String, Int32) |
Belirtilen giriş dizesinde, normal ifade deseniyle eşleşen belirtilen en fazla sayıda dizeyi belirtilen bir değiştirme dizesiyle değiştirir. |
Replace(String, String) |
Belirtilen giriş dizesinde, normal ifade deseniyle eşleşen tüm dizeleri belirtilen bir değiştirme dizesiyle değiştirir. |
Replace(String, String, Int32, Int32) |
Belirtilen bir giriş alt dizesinde, normal ifade deseniyle eşleşen belirtilen en fazla sayıda dizeyi belirtilen bir değiştirme dizesiyle değiştirir. |
Replace(String, MatchEvaluator, Int32, Int32)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen bir giriş alt dizesinde, normal ifade deseniyle eşleşen belirtilen en fazla sayıda dizeyi bir temsilci tarafından MatchEvaluator döndürülen bir dizeyle değiştirir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- evaluator
- MatchEvaluator
Her eşleşmeyi inceleyen ve özgün eşleşen dizeyi veya bir değiştirme dizesini döndüren özel bir yöntem.
- count
- Int32
Değiştirme işleminin en fazla kaç kez gerçekleşeceği.
- startat
- Int32
Giriş dizesinde aramanın başladığı karakter konumu.
Döndürülenler
Eşleşen her dizenin yerini bir değiştirme dizesinin alması dışında, giriş dizesiyle aynı olan yeni bir dize. Normal ifade deseni geçerli örnekte eşleşmiyorsa, yöntemi geçerli örneği değişmeden döndürür.
Özel durumlar
input
veya evaluator
şeklindedir null
.
startat
sıfırdan küçük veya uzunluğundan büyük.input
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Açıklamalar
yöntemi, Regex.Replace(String, MatchEvaluator, Int32, Int32) aşağıdaki koşullardan biri doğruysa normal ifade eşleşmesini değiştirmek için kullanışlıdır:
- Değiştirme dizesi normal ifade değiştirme deseni tarafından kolayca belirtilemez.
- Değiştirme dizesi, eşleşen dizede yapılan bazı işlemlerden kaynaklanır.
- Değiştirme dizesinin sonucu koşullu işlemedir.
yöntemi, yöntemini çağırmak Regex.Matches(String, Int32) ve döndürülen MatchCollection koleksiyondaki ilk count
Match nesneleri temsilciye geçirmekle evaluator
eşdeğerdir.
hakkında startat
daha fazla ayrıntı için öğesinin Açıklamalar bölümüne Match(String, Int32)bakın.
Normal ifade, geçerli Regex nesne için oluşturucu tarafından tanımlanan desendir.
evaluator
parametresi, tanımladığınız ve her eşleşmeyi inceleyen özel bir yöntemin temsilcisidir. Özel yöntemin temsilciyle eşleşmesi için aşağıdaki imzaya MatchEvaluator sahip olması gerekir.
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Özel yönteminiz, eşleşen girişin yerini alan bir dize döndürür.
RegexMatchTimeoutException Değiştirme işleminin yürütme süresi oluşturucu tarafından Regex.Regex(String, RegexOptions, TimeSpan) belirtilen zaman aşımı aralığını aşarsa özel durum oluşturulur. Oluşturucuyu çağırdığınızda zaman aşımı aralığı ayarlamazsanız, işlem nesnenin oluşturulduğu uygulama etki alanı Regex için oluşturulan herhangi bir zaman aşımı değerini aşarsa özel durum oluşturulur. Oluşturucu çağrısında veya uygulama etki alanının özelliklerinde Regex hiçbir zaman aşımı tanımlanmamışsa veya zaman aşımı değeri ise Regex.InfiniteMatchTimeoutözel durum oluşturmaz
Eşleşme yoksa yöntemi değişmeden döndürdüğünden input
, yöntemin giriş dizesinde Object.ReferenceEquals herhangi bir değişiklik yapıp yapmadığına karar vermek için yöntemini kullanabilirsiniz.
Ayrıca bkz.
Şunlara uygulanır
Replace(String, String, String)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen bir giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri belirtilen bir değiştirme dizesiyle değiştirir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- pattern
- String
Eşleştirecek normal ifade deseni.
- replacement
- String
Değişim dizesi.
Döndürülenler
Değiştirilen dizenin eşleşen her dizenin yerini alması dışında giriş dizesiyle aynı olan yeni bir dize. Geçerli örnekte eşleşmezse pattern
, yöntemi değişmeden geçerli örneği döndürür.
Özel durumlar
Normal ifade ayrıştırma hatası oluştu.
input
, pattern
veya replacement
şeklindedir null
.
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki örnek, \s+
bir veya daha fazla boşluk karakteriyle eşleşen bir normal ifadeyi tanımlar. Değiştirme dizesi " ", bunları tek bir boşluk karakteriyle değiştirir.
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.
Aşağıdaki örnek, bir UNC yolundaki yerel makine ve sürücü adlarını yerel dosya yolu ile değiştirmek için yöntemini kullanır Replace(String, String, String) . Normal ifade, yerel bilgisayarın adını eklemek için özelliğini ve Environment.GetLogicalDrives mantıksal sürücülerin adlarını eklemek için yöntemini kullanırEnvironment.MachineName. Örneği başarıyla çalıştırmak için "MyMachine" değişmez dizesini yerel makine adınızla değiştirmeniz gerekir.
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
Normal ifade deseni aşağıdaki ifadeyle tanımlanır:
"\\\\(?i:" + Environment.MachineName + ")(?:\.\w+)*\\((?i:[" + driveNames + "]))\$"
Aşağıdaki tabloda normal ifade deseninin nasıl yorumlandığı gösterilmektedir.
Desen | Description |
---|---|
\\\\ |
İki ardışık ters eğik çizgi (\ ) karakteri eşleştirin. Ters eğik çizgi karakteri kaçış karakteri olarak yorumlandığından, her ters eğik çizginin başka bir ters eğik çizgiyle kaçış karakteri olması gerekir. |
(?i:" + Environment.MachineName + ") |
özelliği tarafından döndürülen dizenin büyük/küçük harfe duyarsız eşleşmesini gerçekleştirin Environment.MachineName . |
(?:\.\w+)* |
Nokta (. ) karakterini ve ardından bir veya daha fazla sözcük karakterini eşleştirin. Bu eşleşme sıfır veya daha fazla kez gerçekleşebilir. Eşleşen alt ifade yakalanmaz. |
\\ |
Ters eğik çizgi (\ ) karakterini eşleştirin. |
((?i:[" + driveNames + "])) |
Tek tek sürücü harflerinden oluşan karakter sınıfının büyük/küçük harfe duyarsız eşleşmesini gerçekleştirin. Bu eşleşme, yakalanan ilk alt ifadedir. |
\$ |
Değişmez değer dolar işareti ($ ) karakterini eşleştirin. |
Değiştirme düzeni $1
, tüm eşleşmeyi yakalanan ilk alt ifadeyle değiştirir. Yani, UNC makinesini ve sürücü adını sürücü harfiyle değiştirir.
Açıklamalar
Statik Replace
yöntemler, belirtilen normal ifade desenine sahip bir Regex nesne oluşturma ve örnek yöntemini Replace
çağırma ile eşdeğerdir.
parametresi, pattern
eşleşecek dizeyi sembolik olarak tanımlayan normal ifade dili öğelerinden oluşur. Normal ifadeler hakkında daha fazla bilgi için bkz . .NET Normal İfadeleri ve Normal İfade Dili - Hızlı Başvuru. Eşleşme araması dizenin başında input
başlar.
parametresi, replacement
içindeki input
her eşleşmenin yerini alacak dizeyi belirtir. replacement
değişmez metin ve değiştirmelerin herhangi bir bileşiminden oluşabilir. Örneğin, değiştirme deseni a*${test}b
"a*" dizesini ve ardından yakalama grubu tarafından eşleşen alt dizeyi test
(varsa) ve ardından "b" dizesini ekler. * karakteri, değiştirme deseni içinde meta karakter olarak tanınmaz.
Not
Değiştirmeler, değiştirme deseninde tanınan tek normal ifade dili öğeleridir. Karakter kaçışları da dahil olmak üzere diğer tüm normal ifade dili öğelerine yalnızca normal ifade desenlerinde izin verilir ve değiştirme desenlerinde tanınmaz.
Değiştirme RegexMatchTimeoutException işleminin yürütme süresi yöntemin çağrıldığı uygulama etki alanı için belirtilen zaman aşımı aralığını aşarsa özel durum oluşturulur. Uygulama etki alanının özelliklerinde zaman aşımı tanımlanmamışsa veya zaman aşımı değeri ise Regex.InfiniteMatchTimeoutözel durum oluşturmaz.
Eşleşme yoksa yöntemi input
değişmediği için yöntemini kullanarak yöntemin Object.ReferenceEquals giriş dizesinde herhangi bir değişiklik yapıp yapmadığını belirleyebilirsiniz.
Arayanlara Notlar
Bu yöntem, çağrıldığı uygulama etki alanının varsayılan zaman aşımı değerine eşit bir aralıktan sonra zaman aşımına uğradı. Uygulama etki alanı için bir zaman aşımı değeri tanımlanmamışsa, yöntemin zaman aşımına girmesini engelleyen değeri InfiniteMatchTimeoutkullanılır. Bir desen eşleşmesini değiştirmek için önerilen statik yöntem, zaman aşımı aralığını ayarlamanıza olanak tanıyan yöntemidir Replace(String, String, String, RegexOptions, TimeSpan).
Ayrıca bkz.
Şunlara uygulanır
Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm alt dizeleri temsilci tarafından döndürülen bir MatchEvaluator dizeyle değiştirir. Ek parametreler, eşleşen işlemi değiştiren seçenekleri ve eşleşme bulunamazsa zaman aşımı aralığını belirtir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- pattern
- String
Eşleştirecek normal ifade deseni.
- evaluator
- MatchEvaluator
Her eşleşmeyi inceleyen ve özgün eşleşen dizeyi veya değiştirme dizesini döndüren özel bir yöntem.
- options
- RegexOptions
Eşleştirme seçenekleri sağlayan sabit listesi değerlerinin bit düzeyinde birleşimi.
- matchTimeout
- TimeSpan
Zaman aşımı aralığı veya InfiniteMatchTimeout yöntemin zaman aşımına neden olmaması gerektiğini belirtmek için.
Döndürülenler
Değiştirilen dizenin eşleşen her dizenin yerini alması dışında giriş dizesiyle aynı olan yeni bir dize. Geçerli örnekte eşleşmezse pattern
, yöntemi değişmeden geçerli örneği döndürür.
Özel durumlar
Normal ifade ayrıştırma hatası oluştu.
input
, pattern
veya evaluator
şeklindedir null
.
options
değerlerin RegexOptions bit düzeyinde geçerli bir bileşimi değildir.
-veya-
matchTimeout
negatif, sıfır veya yaklaşık 24 günden büyük.
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki örnek, bir dizedeki tek tek sözcükleri ayıklamak için normal bir ifade kullanır ve ardından bir temsilciyi MatchEvaluator kullanarak sözcüğün tek tek harflerini karıştıran adlı WordScramble
bir yöntemi çağırır. Bunu yapmak için yöntemi, WordScramble
eşleşmedeki karakterleri içeren bir dizi oluşturur. Ayrıca rastgele kayan noktalı sayılarla dolduran paralel bir dizi oluşturur. Diziler yöntemi çağrılarak Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) sıralanır ve sıralanan dizi bir String sınıf oluşturucusunun bağımsız değişkeni olarak sağlanır. Bu yeni oluşturulan dize daha sonra yöntemi tarafından WordScramble
döndürülür. Normal ifade deseni \w+
bir veya daha fazla sözcük karakteriyle eşleşir; normal ifade altyapısı, boşluk karakteri gibi sözcük olmayan bir karakterle karşılaşana kadar eşleşmeye karakter eklemeye devam eder. yöntemine Replace(String, String, MatchEvaluator, RegexOptions) yapılan çağrı, normal ifade desenindeki \w+ # Matches all the characters in a word.
açıklamanın normal ifade altyapısı tarafından yoksayılmış olması için seçeneğini içerirRegexOptions.IgnorePatternWhitespace.
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
Açıklamalar
Yöntemi Regex.Replace(String, String, MatchEvaluator, RegexOptions) , aşağıdaki koşullardan biri doğruysa normal ifade eşleşmesini değiştirmek için yararlıdır:
Değiştirme dizesi normal ifade değiştirme deseni tarafından kolayca belirtilemiyorsa.
Değiştirme dizesi, eşleşen dizede gerçekleştirilen bazı işlemlerden kaynaklanırsa.
Değiştirme dizesi koşullu işlemeden kaynaklanırsa.
yöntemi, yöntemini çağırmak Regex.Matches(String, String, RegexOptions) ve döndürülen MatchCollection koleksiyondaki her Match nesneyi temsilciye geçirmekle evaluator
eşdeğerdir.
parametresi, pattern
eşleşecek dizeyi sembolik olarak tanımlayan normal ifade dili öğelerinden oluşur. Normal ifadeler hakkında daha fazla bilgi için bkz . .NET Normal İfadeleri ve Normal İfade Dili - Hızlı Başvuru.
evaluator
parametresi, tanımladığınız ve her eşleşmeyi inceleyen özel bir yöntemin temsilcisidir. Temsilciyle eşleşmesi için özel yöntemin aşağıdaki imzaya MatchEvaluator sahip olması gerekir.
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Özel yönteminiz, eşleşen girişin yerini alan bir dize döndürür.
parametresini options
belirtirsenizRightToLeft, eşleşme araması giriş dizesinin sonunda başlar ve sola taşınır; aksi takdirde, arama giriş dizesinin başlangıcında başlar ve sağa taşınır.
parametresi, matchTimeout
desen eşleştirme yönteminin zaman aşımına uğramadan önce eşleşmeyi ne kadar süreyle bulmaya çalışılması gerektiğini belirtir. Zaman aşımı aralığı ayarlamak, aşırı geri izlemeyi kullanan normal ifadelerin "yakın eşleşmeler içeren girişi işlerken yanıt vermeyi durdurma" olarak görünmesini önler. Daha fazla bilgi için bkz. Normal İfadeler ve Geri İzlemeiçin En İyi Yöntemler. Bu zaman aralığında eşleşme bulunmazsa, yöntem bir RegexMatchTimeoutException özel durum oluşturur. matchTimeout
yöntemin yürütüldiği uygulama etki alanı için tanımlanan varsayılan zaman aşımı değerlerini geçersiz kılar.
Eşleşme yoksa yöntemi input
değişmediği için yöntemini kullanarak yöntemin Object.ReferenceEquals giriş dizesinde herhangi bir değişiklik yapıp yapmadığını belirleyebilirsiniz.
Arayanlara Notlar
parametresini matchTimeout
iki saniye gibi uygun bir değere ayarlamanızı öneririz. belirterek InfiniteMatchTimeoutzaman aşımlarını devre dışı bırakırsanız, normal ifade altyapısı biraz daha iyi performans sunar. Ancak, zaman aşımlarını yalnızca aşağıdaki koşullarda devre dışı bırakmanız gerekir:
Normal bir ifade tarafından işlenen giriş bilinen ve güvenilen bir kaynaktan türetildiğinde veya statik metinden oluştuğunda. Bu, kullanıcılar tarafından dinamik olarak giriş yapılan metinleri dışlar.
Normal ifade deseni, eşleşmeleri, eşleşmeleri ve yakın eşleşmeleri verimli bir şekilde işlediğinden emin olmak için kapsamlı bir şekilde test edildiğinde.
Normal ifade deseni, yakın bir eşleşme işlenirken aşırı geri izlenmeye neden olduğu bilinen bir dil öğesi içermediğinde.
Ayrıca bkz.
- RegexOptions
- Normal İfadelerdeki Değişimler
- Normal İfade Dili Öğeleri
- Normal İfadelerde Geri Dönüş
- .NET'te normal ifadeler için en iyi yöntemler
Şunlara uygulanır
Replace(String, String, MatchEvaluator, RegexOptions)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri bir temsilci tarafından döndürülen bir MatchEvaluator dizeyle değiştirir. Belirtilen seçenekler eşleşen işlemi değiştirir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- pattern
- String
Eşleştirecek normal ifade deseni.
- evaluator
- MatchEvaluator
Her eşleşmeyi inceleyen ve özgün eşleşen dizeyi veya değiştirme dizesini döndüren özel bir yöntem.
- options
- RegexOptions
Eşleştirme seçenekleri sağlayan numaralandırma değerlerinin bit düzeyinde birleşimi.
Döndürülenler
Eşleşen her dizenin yerini bir değiştirme dizesinin alması dışında, giriş dizesiyle aynı olan yeni bir dize. Geçerli örnekte eşleşmezse pattern
, yöntemi değişmeden geçerli örneği döndürür.
Özel durumlar
Normal ifade ayrıştırma hatası oluştu.
input
, pattern
veya evaluator
şeklindedir null
.
options
değerlerin RegexOptions bit düzeyinde geçerli bir bileşimi değildir.
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki örnek, bir dizedeki tek tek sözcükleri ayıklamak için normal bir ifade kullanır ve ardından bir temsilciyi MatchEvaluator kullanarak sözcüğün tek tek harflerini karıştıran adlı WordScramble
bir yöntemi çağırır. Bunu yapmak için yöntemi, WordScramble
eşleşmedeki karakterleri içeren bir dizi oluşturur. Ayrıca rastgele kayan noktalı sayılarla dolduran paralel bir dizi oluşturur. Diziler yöntemi çağrılarak Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) sıralanır ve sıralanan dizi bir String sınıf oluşturucusunun bağımsız değişkeni olarak sağlanır. Bu yeni oluşturulan dize daha sonra yöntemi tarafından WordScramble
döndürülür. Normal ifade deseni \w+
bir veya daha fazla sözcük karakteriyle eşleşir; normal ifade altyapısı, boşluk karakteri gibi sözcük olmayan bir karakterle karşılaşana kadar eşleşmeye karakter eklemeye devam eder. yöntemine Replace(String, String, MatchEvaluator, RegexOptions) yapılan çağrı, normal ifade desenindeki \w+ # Matches all the characters in a word.
açıklamanın normal ifade altyapısı tarafından yoksayılmış olması için seçeneğini içerirRegexOptions.IgnorePatternWhitespace.
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
Açıklamalar
yöntemi Regex.Replace(String, String, MatchEvaluator, RegexOptions) , aşağıdaki koşullardan biri doğruysa içindeki normal ifade eşleşmesini değiştirmek için yararlıdır:
Değiştirme dizesi normal ifade değiştirme deseni tarafından kolayca belirtilemez.
Değiştirme dizesi, eşleşen dizede yapılan bazı işlemlerden kaynaklanır.
Değiştirme dizesinin sonucu koşullu işlemedir.
yöntemi, yöntemini çağırmak Regex.Matches(String, String, RegexOptions) ve döndürülen MatchCollection koleksiyondaki her Match nesneyi temsilciye geçirmekle evaluator
eşdeğerdir.
parametresi, pattern
eşleşecek dizeyi sembolik olarak tanımlayan normal ifade dili öğelerinden oluşur. Normal ifadeler hakkında daha fazla bilgi için bkz . .NET Normal İfadeleri ve Normal İfade Dili - Hızlı Başvuru.
evaluator
parametresi, tanımladığınız ve her eşleşmeyi inceleyen özel bir yöntemin temsilcisidir. Temsilciyle eşleşmesi için özel yöntemin aşağıdaki imzaya MatchEvaluator sahip olması gerekir.
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Özel yönteminiz, eşleşen girişin yerini alan bir dize döndürür.
parametresini options
belirtirsenizRightToLeft, eşleşme araması giriş dizesinin sonunda başlar ve sola taşınır; aksi takdirde, arama giriş dizesinin başlangıcında başlar ve sağa taşınır.
Değiştirme RegexMatchTimeoutException işleminin yürütme süresi yöntemin çağrıldığı uygulama etki alanı için belirtilen zaman aşımı aralığını aşarsa özel durum oluşturulur. Uygulama etki alanının özelliklerinde zaman aşımı tanımlanmamışsa veya zaman aşımı değeri ise Regex.InfiniteMatchTimeoutözel durum oluşturmaz.
Eşleşme yoksa yöntemi input
değişmediği için yöntemini kullanarak yöntemin Object.ReferenceEquals giriş dizesinde herhangi bir değişiklik yapıp yapmadığını belirleyebilirsiniz.
Ayrıca bkz.
Şunlara uygulanır
Replace(String, String, String, RegexOptions, TimeSpan)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen bir giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri belirtilen değiştirme dizesiyle değiştirir. Ek parametreler, eşleşen işlemi değiştiren seçenekleri ve eşleşme bulunamazsa zaman aşımı aralığını belirtir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- pattern
- String
Eşleştirecek normal ifade deseni.
- replacement
- String
Değişim dizesi.
- options
- RegexOptions
Eşleştirme seçenekleri sağlayan numaralandırma değerlerinin bit düzeyinde birleşimi.
- matchTimeout
- TimeSpan
Zaman aşımı aralığı veya InfiniteMatchTimeout yöntemin zaman aşımına neden olmaması gerektiğini belirtmek için.
Döndürülenler
Eşleşen her dizenin yerini değiştirme dizesinin alması dışında, giriş dizesiyle aynı olan yeni bir dize. Geçerli örnekte eşleşmezse pattern
, yöntemi geçerli örneği değiştirmeden döndürür.
Özel durumlar
Normal ifade ayrıştırma hatası oluştu.
input
, pattern
veya replacement
şeklindedir null
.
options
, değerlerin RegexOptions bit düzeyinde geçerli bir bileşimi değildir.
-veya-
matchTimeout
negatif, sıfır veya yaklaşık 24 günden büyük.
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki örnek, bir UNC yolundaki yerel makine ve sürücü adlarını yerel dosya yolu ile değiştirmek için yöntemini kullanır Replace(String, String, String, RegexOptions, TimeSpan) . Normal ifade, yerel bilgisayarın Environment.GetLogicalDrives adını ve mantıksal sürücülerin adlarını eklemek için yöntemini eklemek için özelliğini kullanırEnvironment.MachineName. Tüm normal ifade dizesi karşılaştırmaları büyük/küçük harfe duyarlı değildir ve bir eşleşme 0,5 saniye içinde bulunamazsa tek bir değiştirme işlemi zaman aşımına uysa. Örneği başarıyla çalıştırmak için "MyMachine" değişmez dizesini yerel makine adınızla değiştirmeniz gerekir.
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
Normal ifade deseni aşağıdaki ifadeyle tanımlanır:
"\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"
Aşağıdaki tabloda normal ifade deseninin nasıl yorumlandığı gösterilmektedir.
Desen | Description |
---|---|
\\\\ |
İki ardışık ters eğik çizgi (\ ) karakteri eşleştirin. Ters eğik çizgi karakteri kaçış karakteri olarak yorumlandığından, her ters eğik çizginin başka bir ters eğik çizgiyle kaçış karakteri olması gerekir. |
+ Environment.MachineName + |
özelliği tarafından döndürülen dizeyle eşleş.Environment.MachineName |
(?:\.\w+)* |
Nokta (. ) karakterini ve ardından bir veya daha fazla sözcük karakterini eşleştirin. Bu eşleşme sıfır veya daha fazla kez gerçekleşebilir. Eşleşen alt ifade yakalanmaz. |
\\ |
Ters eğik çizgi (\ ) karakterini eşleştirin. |
([" + driveNames + "]) |
Tek tek sürücü harflerinden oluşan karakter sınıfıyla eşleş. Bu eşleşme, yakalanan ilk alt ifadedir. |
\$ |
Değişmez değer dolar işareti ($ ) karakterini eşleştirin. |
Değiştirme düzeni $1
, tüm eşleşmeyi yakalanan ilk alt ifadeyle değiştirir. Yani, UNC makinesini ve sürücü adını sürücü harfiyle değiştirir.
Açıklamalar
Statik Replace
yöntemler, belirtilen normal ifade desenine sahip bir Regex nesne oluşturma ve örnek yöntemini Replace
çağırma ile eşdeğerdir.
parametresi, pattern
eşleşecek dizeyi sembolik olarak tanımlayan normal ifade dili öğelerinden oluşur. Normal ifadeler hakkında daha fazla bilgi için bkz . .NET Normal İfadeleri ve Normal İfade Dili - Hızlı Başvuru. parametresini options
belirtirsenizRightToLeft, eşleşme araması giriş dizesinin sonunda başlar ve sola taşınır; aksi takdirde, arama giriş dizesinin başlangıcında başlar ve sağa doğru ilerler.
parametresi, replacement
içindeki input
her eşleşmenin yerini alacak dizeyi belirtir. replacement
değişmez metin ve değiştirmelerin herhangi bir bileşiminden oluşabilir. Örneğin, değiştirme deseni a*${test}b
"a*" dizesini ve ardından yakalama grubu tarafından test
eşleşen alt dizeyi (varsa) ve ardından "b" dizesini ekler. * karakteri, değiştirme deseni içinde meta karakter olarak tanınmaz.
Not
Değiştirmeler, değiştirme deseninde tanınan tek normal ifade dili öğeleridir. Karakter kaçışları da dahil olmak üzere diğer tüm normal ifade dili öğelerine yalnızca normal ifade desenlerinde izin verilir ve değiştirme desenlerinde tanınmaz.
parametresi, matchTimeout
desen eşleştirme yönteminin zaman aşımına uğramadan önce eşleşmeyi ne kadar süreyle bulmaya çalışılması gerektiğini belirtir. Zaman aşımı aralığı ayarlamak, aşırı geri izleme kullanan normal ifadelerin, yakın eşleşmeler içeren girişleri işlerken yanıt vermeyi durdurmak için görünmesini engeller. Daha fazla bilgi için bkz. Normal İfadeler ve Geri İzlemeiçin En İyi Yöntemler. Bu zaman aralığında eşleşme bulunmazsa, yöntem bir RegexMatchTimeoutException özel durum oluşturur. matchTimeout
, yöntemin yürütüldiği uygulama etki alanı için tanımlanan varsayılan zaman aşımı değerlerini geçersiz kılar.
Eşleşme yoksa yöntemi değişmeden döndürdüğünden input
, yöntemin giriş dizesinde Object.ReferenceEquals herhangi bir değişiklik yapıp yapmadığına karar vermek için yöntemini kullanabilirsiniz.
Arayanlara Notlar
parametresini matchTimeout
iki saniye gibi uygun bir değere ayarlamanızı öneririz. belirterek InfiniteMatchTimeoutzaman aşımlarını devre dışı bırakırsanız, normal ifade altyapısı biraz daha iyi performans sunar. Ancak, zaman aşımlarını yalnızca aşağıdaki koşullar altında devre dışı bırakmanız gerekir:
Normal bir ifade tarafından işlenen giriş bilinen ve güvenilir bir kaynaktan türetildiğinde veya statik metinden oluştuğunda. Bu, kullanıcılar tarafından dinamik olarak giriş yapılan metinleri dışlar.
Normal ifade deseni eşleşmeleri, eşleşme olmayanları ve yakın eşleşmeleri verimli bir şekilde işlediğinden emin olmak için kapsamlı bir şekilde test edildiğinde.
Normal ifade deseni, yakın bir eşleşmeyi işlerken aşırı geri dönüşe neden olduğu bilinen bir dil öğesi içermediğinde.
Ayrıca bkz.
- RegexOptions
- Normal İfadelerdeki Değişimler
- Normal İfade Dili Öğeleri
- Normal İfadelerde Geri Dönüş
- .NET'te normal ifadeler için en iyi yöntemler
Şunlara uygulanır
Replace(String, String, String, RegexOptions)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen bir giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri belirtilen bir değiştirme dizesiyle değiştirir. Belirtilen seçenekler eşleşen işlemi değiştirir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- pattern
- String
Eşleştirecek normal ifade deseni.
- replacement
- String
Değişim dizesi.
- options
- RegexOptions
Eşleştirme seçenekleri sağlayan numaralandırma değerlerinin bit düzeyinde birleşimi.
Döndürülenler
Değiştirilen dizenin eşleşen her dizenin yerini alması dışında giriş dizesiyle aynı olan yeni bir dize. Geçerli örnekte eşleşmezse pattern
, yöntemi değişmeden geçerli örneği döndürür.
Özel durumlar
Normal ifade ayrıştırma hatası oluştu.
input
, pattern
veya replacement
şeklindedir null
.
options
, değerlerin RegexOptions bit düzeyinde geçerli bir bileşimi değildir.
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki örnek, bir UNC yolundaki yerel makine ve sürücü adlarını yerel dosya yolu ile değiştirmek için yöntemini kullanır Replace(String, String, String, RegexOptions) . Normal ifade, yerel bilgisayarın adını eklemek için özelliğini ve Environment.GetLogicalDrives mantıksal sürücülerin adlarını eklemek için yöntemini kullanırEnvironment.MachineName. Tüm normal ifade dizesi karşılaştırmaları büyük/küçük harfe duyarlı değildir. Örneği başarıyla çalıştırmak için "MyMachine" değişmez dizesini yerel makine adınızla değiştirmeniz gerekir.
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
Normal ifade deseni aşağıdaki ifadeyle tanımlanır:
"\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"
Aşağıdaki tabloda normal ifade deseninin nasıl yorumlandığı gösterilmektedir.
Desen | Description |
---|---|
\\\\ |
İki ardışık ters eğik çizgi (\ ) karakteri eşleştirin. Ters eğik çizgi karakteri kaçış karakteri olarak yorumlandığından, her ters eğik çizginin başka bir ters eğik çizgiyle kaçış karakteri olması gerekir. |
+ Environment.MachineName + |
özelliği tarafından döndürülen dizeyle eşleş.Environment.MachineName |
(?:\.\w+)* |
Nokta (. ) karakterini ve ardından bir veya daha fazla sözcük karakterini eşleştirin. Bu eşleşme sıfır veya daha fazla kez gerçekleşebilir. Eşleşen alt ifade yakalanmaz. |
\\ |
Ters eğik çizgi (\ ) karakterini eşleştirin. |
([" + driveNames + "]) |
Tek tek sürücü harflerinden oluşan karakter sınıfıyla eşleş. Bu eşleşme, yakalanan ilk alt ifadedir. |
\$ |
Değişmez değer dolar işareti ($ ) karakterini eşleştirin. |
Değiştirme düzeni $1
, tüm eşleşmeyi yakalanan ilk alt ifadeyle değiştirir. Yani, UNC makinesini ve sürücü adını sürücü harfiyle değiştirir.
Açıklamalar
Statik Replace
yöntemler, belirtilen normal ifade desenine sahip bir Regex nesne oluşturma ve örnek yöntemini Replace
çağırma ile eşdeğerdir.
parametresi, pattern
eşleşecek dizeyi sembolik olarak tanımlayan normal ifade dili öğelerinden oluşur. Normal ifadeler hakkında daha fazla bilgi için bkz . .NET Normal İfadeleri ve Normal İfade Dili - Hızlı Başvuru. parametresini options
belirtirsenizRightToLeft, eşleşme araması giriş dizesinin sonunda başlar ve sola taşınır; aksi takdirde, arama giriş dizesinin başlangıcında başlar ve sağa doğru ilerler.
parametresi, replacement
içindeki input
her eşleşmenin yerini alacak dizeyi belirtir. replacement
değişmez metin ve değiştirmelerin herhangi bir bileşiminden oluşabilir. Örneğin, değiştirme deseni a*${test}b
"a*" dizesini ve ardından yakalama grubu tarafından eşleşen alt dizeyi test
(varsa) ve ardından "b" dizesini ekler. * karakteri, değiştirme deseni içinde meta karakter olarak tanınmaz.
Not
Değiştirmeler, değiştirme deseninde tanınan tek normal ifade dili öğeleridir. Karakter kaçışları da dahil olmak üzere diğer tüm normal ifade dili öğelerine yalnızca normal ifade desenlerinde izin verilir ve değiştirme desenlerinde tanınmaz.
Değiştirme RegexMatchTimeoutException işleminin yürütme süresi yöntemin çağrıldığı uygulama etki alanı için belirtilen zaman aşımı aralığını aşarsa özel durum oluşturulur. Uygulama etki alanının özelliklerinde zaman aşımı tanımlanmamışsa veya zaman aşımı değeri ise Regex.InfiniteMatchTimeoutözel durum oluşturmaz.
Eşleşme yoksa yöntemi input
değişmediği için yöntemini kullanarak yöntemin Object.ReferenceEquals giriş dizesinde herhangi bir değişiklik yapıp yapmadığını belirleyebilirsiniz.
Arayanlara Notlar
Bu yöntem, çağrıldığı uygulama etki alanının varsayılan zaman aşımı değerine eşit bir aralıktan sonra zaman aşımına uğradı. Uygulama etki alanı için bir zaman aşımı değeri tanımlanmamışsa, yöntemin zaman aşımına girmesini engelleyen değeri InfiniteMatchTimeoutkullanılır. Bir desen eşleşmesini değiştirmek için önerilen statik yöntem, zaman aşımı aralığını ayarlamanıza olanak tanıyan yöntemidir Replace(String, String, String, RegexOptions, TimeSpan).
Ayrıca bkz.
Şunlara uygulanır
Replace(String, MatchEvaluator)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri bir temsilci tarafından döndürülen bir MatchEvaluator dizeyle değiştirir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- evaluator
- MatchEvaluator
Her eşleşmeyi inceleyen ve özgün eşleşen dizeyi veya değiştirme dizesini döndüren özel bir yöntem.
Döndürülenler
Eşleşen her dizenin yerini bir değiştirme dizesinin alması dışında, giriş dizesiyle aynı olan yeni bir dize. Normal ifade deseni geçerli örnekte eşleşmiyorsa, yöntemi geçerli örneği değişmeden döndürür.
Özel durumlar
input
veya evaluator
şeklindedir null
.
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki kod örneği özgün dizeyi görüntüler, özgün dizedeki her sözcükle eşleşir, her eşleşmenin ilk karakterini büyük harfe dönüştürür ve ardından dönüştürülen dizeyi görüntüler.
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]
Açıklamalar
Yöntemi Regex.Replace(String, MatchEvaluator) , aşağıdaki koşullardan biri doğruysa normal ifade eşleşmesini değiştirmek için yararlıdır:
Değiştirme dizesi normal ifade değiştirme deseni tarafından kolayca belirtilemez.
Değiştirme dizesi, eşleşen dizede yapılan bazı işlemlerden kaynaklanır.
Değiştirme dizesinin sonucu koşullu işlemedir.
yöntemi, yöntemini çağırmak Regex.Matches(String) ve döndürülen MatchCollection koleksiyondaki her Match nesneyi temsilciye geçirmekle evaluator
eşdeğerdir.
Normal ifade, geçerli Regex nesne için oluşturucu tarafından tanımlanan desendir.
evaluator
parametresi, tanımladığınız ve her eşleşmeyi inceleyen özel bir yöntemin temsilcisidir. Temsilciyle eşleşmesi için özel yöntemin aşağıdaki imzaya MatchEvaluator sahip olması gerekir.
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Özel yönteminiz, eşleşen girişin yerini alan bir dize döndürür.
Değiştirme RegexMatchTimeoutException işleminin yürütme süresi oluşturucu tarafından Regex.Regex(String, RegexOptions, TimeSpan) belirtilen zaman aşımı aralığını aşarsa özel durum oluşturulur. Oluşturucuyu çağırdığınızda zaman aşımı aralığı ayarlamazsanız, işlem nesnenin oluşturulduğu uygulama etki alanı Regex için belirlenen zaman aşımı değerini aşarsa özel durum oluşturulur. Oluşturucu çağrısında Regex veya uygulama etki alanının özelliklerinde zaman aşımı tanımlanmadıysa veya zaman aşımı değeri ise Regex.InfiniteMatchTimeout, özel durum oluşturmaz
Eşleşme yoksa yöntemi input
değişmediği için yöntemini kullanarak yöntemin Object.ReferenceEquals giriş dizesinde herhangi bir değişiklik yapıp yapmadığını belirleyebilirsiniz.
Ayrıca bkz.
Şunlara uygulanır
Replace(String, MatchEvaluator, Int32)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen giriş dizesinde, normal ifade deseniyle eşleşen belirtilen en fazla dize sayısını temsilci tarafından MatchEvaluator döndürülen bir dizeyle değiştirir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- evaluator
- MatchEvaluator
Her eşleşmeyi inceleyen ve özgün eşleşen dizeyi veya değiştirme dizesini döndüren özel bir yöntem.
- count
- Int32
Değiştirmenin en fazla kaç kez gerçekleşeceği.
Döndürülenler
Eşleşen her dizenin yerini bir değiştirme dizesinin alması dışında, giriş dizesiyle aynı olan yeni bir dize. Normal ifade deseni geçerli örnekte eşleşmiyorsa, yöntemi geçerli örneği değişmeden döndürür.
Özel durumlar
input
veya evaluator
şeklindedir null
.
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki örnek, bir listedeki sözcüklerin yarısını kasıtlı olarak yanlış göndermek için normal bir ifade kullanır. "ie" veya "ei" karakterlerini içeren sözcükleri eşleştirmek için normal ifadeyi \w*(ie|ei)\w*
kullanır. Eşleşen sözcüklerin ilk yarısını yöntemine ReverseLetter
geçirir ve bu yöntem de eşleşen dizede "i" ve "e" değerlerini ters çevirmek için yöntemini kullanır Replace(String, String, String, RegexOptions) . Kalan sözcükler değişmeden kalır.
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
Normal ifade \w*(ie|ei)\w*
aşağıdaki tabloda gösterildiği gibi tanımlanır.
Desen | Description |
---|---|
\w* |
Sıfır veya daha fazla sözcük karakteriyle eşleş. |
(ie|ei) |
"ie" veya "ei" ile eşleştirin. |
\w* |
Sıfır veya daha fazla sözcük karakteriyle eşleş. |
Yöntemdeki ReverseLetter
normal ifade deseni([ie])([ie])
, diphthong "ie" veya "ei" içindeki ilk "i" veya "e" ile eşleşir ve harfi ilk yakalama grubuna atar. İkinci "i" veya "e" ile eşleşir ve harfi ikinci yakalama grubuna atar. Ardından iki karakter, değiştirme deseni Replace(String, String, String)$2$1
ile yöntemi çağrılarak tersine çevrilir.
Açıklamalar
Yöntemi Regex.Replace(String, MatchEvaluator, Int32) , aşağıdaki koşullardan biri doğruysa normal ifade eşleşmesini değiştirmek için yararlıdır:
Değiştirme dizesi normal ifade değiştirme deseni tarafından kolayca belirtilemez.
Değiştirme dizesi, eşleşen dizede yapılan bazı işlemlerden kaynaklanır.
Değiştirme dizesinin sonucu koşullu işlemedir.
yöntemi, yöntemini çağırmak Regex.Matches(String) ve döndürülen MatchCollection koleksiyondaki ilk count
Match nesneleri temsilciye geçirmekle evaluator
eşdeğerdir.
Normal ifade, geçerli Regex nesne için oluşturucu tarafından tanımlanan desendir.
evaluator
parametresi, tanımladığınız ve her eşleşmeyi inceleyen özel bir yöntemin temsilcisidir. Temsilciyle eşleşmesi için özel yöntemin aşağıdaki imzaya MatchEvaluator sahip olması gerekir.
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Özel yönteminiz, eşleşen girişin yerini alan bir dize döndürür.
Değiştirme RegexMatchTimeoutException işleminin yürütme süresi oluşturucu tarafından Regex.Regex(String, RegexOptions, TimeSpan) belirtilen zaman aşımı aralığını aşarsa özel durum oluşturulur. Oluşturucuyu çağırdığınızda zaman aşımı aralığı ayarlamazsanız, işlem nesnenin oluşturulduğu uygulama etki alanı Regex için belirlenen zaman aşımı değerini aşarsa özel durum oluşturulur. Oluşturucu çağrısında Regex veya uygulama etki alanının özelliklerinde zaman aşımı tanımlanmadıysa veya zaman aşımı değeri ise Regex.InfiniteMatchTimeout, özel durum oluşturmaz
Eşleşme yoksa yöntemi input
değişmediği için yöntemini kullanarak yöntemin Object.ReferenceEquals giriş dizesinde herhangi bir değişiklik yapıp yapmadığını belirleyebilirsiniz.
Ayrıca bkz.
Şunlara uygulanır
Replace(String, String, MatchEvaluator)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen giriş dizesinde, belirtilen normal ifadeyle eşleşen tüm dizeleri bir temsilci tarafından MatchEvaluator döndürülen bir dizeyle değiştirir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- pattern
- String
Eşleştirecek normal ifade deseni.
- evaluator
- MatchEvaluator
Her eşleşmeyi inceleyen ve özgün eşleşen dizeyi veya değiştirme dizesini döndüren özel bir yöntem.
Döndürülenler
Eşleşen her dizenin yerini bir değiştirme dizesinin alması dışında, giriş dizesiyle aynı olan yeni bir dize. Geçerli örnekte eşleşmezse pattern
, yöntemi geçerli örneği değiştirmeden döndürür.
Özel durumlar
Normal ifade ayrıştırma hatası oluştu.
input
, pattern
veya evaluator
şeklindedir null
.
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki örnek, bir dizedeki tek tek sözcükleri ayıklamak için normal bir ifade kullanır ve ardından bir temsilciyi MatchEvaluator kullanarak sözcüğün tek tek harflerini karıştıran adlı WordScramble
bir yöntemi çağırır. Bunu yapmak için yöntemi, WordScramble
eşleşmedeki karakterleri içeren bir dizi oluşturur. Ayrıca rastgele kayan noktalı sayılarla dolduran paralel bir dizi oluşturur. Diziler yöntemi çağrılarak Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) sıralanır ve sıralanan dizi bir String sınıf oluşturucusunun bağımsız değişkeni olarak sağlanır. Bu yeni oluşturulan dize daha sonra yöntemi tarafından WordScramble
döndürülür. Normal ifade deseni \w+
bir veya daha fazla sözcük karakteriyle eşleşir; normal ifade altyapısı, boşluk karakteri gibi sözcük olmayan bir karakterle karşılaşana kadar eşleşmeye karakter eklemeye devam eder.
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
Açıklamalar
Yöntemi Regex.Replace(String, String, MatchEvaluator) , aşağıdaki koşullardan biri doğruysa normal ifade eşleşmesini değiştirmek için yararlıdır:
Değiştirme dizesi normal ifade değiştirme deseni tarafından kolayca belirtilemez.
Değiştirme dizesi, eşleşen dizede yapılan bazı işlemlerden kaynaklanır.
Değiştirme dizesinin sonucu koşullu işlemedir.
yöntemi, yöntemini çağırmak Regex.Matches(String, String) ve döndürülen MatchCollection koleksiyondaki her Match nesneyi temsilciye geçirmekle evaluator
eşdeğerdir.
parametresi, pattern
eşleşecek dizeyi sembolik olarak tanımlayan normal ifade dili öğelerinden oluşur. Normal ifadeler hakkında daha fazla bilgi için bkz . .NET Normal İfadeleri ve Normal İfade Dili - Hızlı Başvuru.
evaluator
parametresi, tanımladığınız ve her eşleşmeyi inceleyen özel bir yöntemin temsilcisidir. Temsilciyle eşleşmesi için özel yöntemin aşağıdaki imzaya MatchEvaluator sahip olması gerekir.
public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String
Özel yönteminiz, eşleşen girişin yerini alan bir dize döndürür.
RegexMatchTimeoutException Değiştirme işleminin yürütme süresi yöntemin çağrıldığı uygulama etki alanı için belirtilen zaman aşımı aralığını aşarsa özel durum oluşturulur. Uygulama etki alanının özelliklerinde zaman aşımı tanımlanmamışsa veya zaman aşımı değeri ise Regex.InfiniteMatchTimeoutözel durum oluşturmaz.
Eşleşme yoksa yöntemi değişmeden döndürdüğünden input
, yöntemin giriş dizesinde Object.ReferenceEquals herhangi bir değişiklik yapıp yapmadığına karar vermek için yöntemini kullanabilirsiniz.
Arayanlara Notlar
Bu yöntem, çağrıldığı uygulama etki alanının varsayılan zaman aşımı değerine eşit bir aralıktan sonra zaman aşımına uğradı. Uygulama etki alanı için bir zaman aşımı değeri tanımlanmamışsa, yönteminin zaman aşımına geçmesini engelleyen değeri InfiniteMatchTimeoutkullanılır. Desen eşleşmesini değerlendirmek ve değiştirmek için önerilen statik yöntem, zaman aşımı aralığını ayarlamanıza olanak tanıyan yöntemidir Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan).
Ayrıca bkz.
Şunlara uygulanır
Replace(String, String, Int32)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen giriş dizesinde, normal ifade deseniyle eşleşen belirtilen en fazla sayıda dizeyi belirtilen bir değiştirme dizesiyle değiştirir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- replacement
- String
Değişim dizesi.
- count
- Int32
Değiştirmenin en fazla kaç kez gerçekleşebileceği.
Döndürülenler
Eşleşen her dizenin yerini değiştirme dizesinin alması dışında, giriş dizesiyle aynı olan yeni bir dize. Normal ifade deseni geçerli örnekte eşleşmiyorsa, yöntemi geçerli örneği değişmeden döndürür.
Özel durumlar
input
veya replacement
şeklindedir null
.
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki örnek, yinelenen karakterlerin ilk beş oluşumunu tek bir karakterle değiştirir. Normal ifade deseni (\w)\1
, tek bir karakterin ardışık oluşumlarıyla eşleşir ve ilk oluşumu ilk yakalama grubuna atar. Değiştirme düzeni $1
, eşleşmenin tamamını yakalanan ilk grupla değiştirir.
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'
Açıklamalar
Eşleşme araması dizenin başında input
başlar. Normal ifade, geçerli Regex nesnenin oluşturucu tarafından tanımlanan desendir. Negatifse count
, değiştirmeler dizenin sonuna kadar devam eder. Eşleşme sayısı aşılırsa count
, tüm eşleşmeler değiştirilir.
parametresi, replacement
içindeki input
ilk count
eşleşmelerin yerini alacak dizeyi belirtir. replacement
değişmez metin ve değiştirmelerin herhangi bir bileşiminden oluşabilir. Örneğin, değiştirme deseni a*${test}b
"a*" dizesini ve ardından yakalama grubu tarafından test
eşleşen alt dizeyi (varsa) ve ardından "b" dizesini ekler. * karakteri, değiştirme deseni içinde meta karakter olarak tanınmaz.
Not
Değiştirmeler, değiştirme deseninde tanınan tek normal ifade dili öğeleridir. Karakter kaçışları da dahil olmak üzere diğer tüm normal ifade dili öğelerine yalnızca normal ifade desenlerinde izin verilir ve değiştirme desenlerinde tanınmaz.
RegexMatchTimeoutException Değiştirme işleminin yürütme süresi oluşturucu tarafından Regex.Regex(String, RegexOptions, TimeSpan) belirtilen zaman aşımı aralığını aşarsa özel durum oluşturulur. Oluşturucuyu çağırdığınızda zaman aşımı aralığı ayarlamazsanız, işlem nesnenin oluşturulduğu uygulama etki alanı Regex için oluşturulan herhangi bir zaman aşımı değerini aşarsa özel durum oluşturulur. Oluşturucu çağrısında veya uygulama etki alanının özelliklerinde Regex hiçbir zaman aşımı tanımlanmamışsa veya zaman aşımı değeri ise Regex.InfiniteMatchTimeoutözel durum oluşturmaz
Eşleşme yoksa yöntemi değişmeden döndürdüğünden input
, yöntemin giriş dizesinde Object.ReferenceEquals herhangi bir değişiklik yapıp yapmadığına karar vermek için yöntemini kullanabilirsiniz.
Ayrıca bkz.
Şunlara uygulanır
Replace(String, String)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen giriş dizesinde, normal ifade deseniyle eşleşen tüm dizeleri belirtilen bir değiştirme dizesiyle değiştirir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- replacement
- String
Değişim dizesi.
Döndürülenler
Eşleşen her dizenin yerini değiştirme dizesinin alması dışında, giriş dizesiyle aynı olan yeni bir dize. Normal ifade deseni geçerli örnekte eşleşmiyorsa, yöntemi geçerli örneği değişmeden döndürür.
Özel durumlar
input
veya replacement
şeklindedir null
.
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki örnek, \s+
bir veya daha fazla boşluk karakteriyle eşleşen bir normal ifadeyi tanımlar. Değiştirme dizesi " ", bunları tek bir boşluk karakteriyle değiştirir.
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.
Aşağıdaki örnek, (\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})?
bir sayısal değerden baştaki veya sondaki para birimi simgesini kaldıran bir normal ifadeyi , ve değiştirme desenini $2
tanımlar.
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'
Normal ifade aşağıdaki tabloda gösterildiği gibi yorumlanır.
Desen | Description |
---|---|
\p{Sc} |
Para birimi simgesini eşleştirin. {Sc} Unicode Simgesi, Para Birimi kategorisinin üyesi olan herhangi bir karakteri belirtir. |
\s? |
Sıfır veya bir beyaz boşluk karakterini eşleştirin. |
(\p{Sc}\s?)? |
Para birimi simgesinin birleşiminin sıfır veya bir oluşumunu sıfır veya bir boşluk karakteriyle eşleştirin. Bu ilk yakalama grubudur. |
\d+ |
Bir veya daha fazla ondalık basamağı eşleştirin. |
\.? |
Noktanın sıfır veya bir oluşumunu eşleştirin (ondalık ayırıcı karakteri olarak kullanılır). |
((?<=\.)\d+)? |
Nokta önceki karakterse, bir veya daha fazla ondalık basamakla eşleş. Bu desen sıfır veya bir kez eşleştirilebilir. |
(\d+\.?((?<=\.)\d+)?) |
Bir veya daha fazla ondalık basamağı ve ardından isteğe bağlı bir nokta ve ek ondalık basamak desenini eşleştirin. Bu ikinci yakalama grubudur. yöntemine yapılan Replace(String, String) çağrı, eşleşmenin tamamını bu yakalanan grubun değeriyle değiştirir. |
(?(1)|\s?\p{Sc})? |
Yakalanan ilk grup varsa, boş bir dizeyle eşleştirin. Aksi takdirde, sıfır veya bir boşluk karakterini ve ardından bir para birimi simgesini eşleştirin. |
Açıklamalar
Eşleşme araması dizenin başında input
başlar. Normal ifade, geçerli Regex nesne için oluşturucu tarafından tanımlanan desendir.
parametresi, replacement
içindeki input
her eşleşmenin yerini alacak dizeyi belirtir. replacement
değişmez metin ve değiştirmelerin herhangi bir bileşiminden oluşabilir. Örneğin, değiştirme deseni a*${test}b
"a*" dizesini ve ardından yakalama grubu tarafından test
eşleşen alt dizeyi (varsa) ve ardından "b" dizesini ekler. * karakteri, değiştirme deseni içinde meta karakter olarak tanınmaz.
Not
Değiştirmeler, değiştirme deseninde tanınan tek normal ifade dili öğeleridir. Karakter kaçışları da dahil olmak üzere diğer tüm normal ifade dili öğelerine yalnızca normal ifade desenlerinde izin verilir ve değiştirme desenlerinde tanınmaz.
RegexMatchTimeoutException Değiştirme işleminin yürütme süresi oluşturucu tarafından Regex.Regex(String, RegexOptions, TimeSpan) belirtilen zaman aşımı aralığını aşarsa özel durum oluşturulur. Oluşturucuyu çağırdığınızda zaman aşımı aralığı ayarlamazsanız, işlem nesnenin oluşturulduğu uygulama etki alanı Regex için oluşturulan herhangi bir zaman aşımı değerini aşarsa özel durum oluşturulur. Oluşturucu çağrısında veya uygulama etki alanının özelliklerinde Regex hiçbir zaman aşımı tanımlanmamışsa veya zaman aşımı değeri ise Regex.InfiniteMatchTimeoutözel durum oluşturmaz
Eşleşme yoksa yöntemi değişmeden döndürdüğünden input
, yöntemin giriş dizesinde Object.ReferenceEquals herhangi bir değişiklik yapıp yapmadığına karar vermek için yöntemini kullanabilirsiniz.
Ayrıca bkz.
Şunlara uygulanır
Replace(String, String, Int32, Int32)
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
- Source:
- Regex.Replace.cs
Belirtilen bir giriş alt dizesinde, normal ifade deseniyle eşleşen belirtilen en fazla dize sayısını belirtilen bir değiştirme dizesiyle değiştirir.
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
Parametreler
- input
- String
Eşleşme aranacak dize.
- replacement
- String
Değişim dizesi.
- count
- Int32
Değiştirmenin en fazla kaç kez gerçekleşebileceği.
- startat
- Int32
Giriş dizesinde aramanın başladığı karakter konumu.
Döndürülenler
Değiştirilen dizenin eşleşen her dizenin yerini alması dışında giriş dizesiyle aynı olan yeni bir dize. Normal ifade deseni geçerli örnekte eşleşmiyorsa, yöntemi geçerli örneği değişmeden döndürür.
Özel durumlar
input
veya replacement
şeklindedir null
.
startat
sıfırdan küçük veya uzunluğundan büyük.input
Zaman aşımı oluştu. Zaman aşımları hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.
Örnekler
Aşağıdaki örnek, bir dizenin ilk satırı dışında tümünü çift boşluklar. Bir metin satırıyla eşleşen, dizenin Match(String) ilk satırıyla eşleşmesi için yöntemini çağıran ve ikinci satırın başlangıç konumunu belirlemek için ve Match.Count
özelliklerini kullanan Match.Index
normal ifade desenini ^.*$
tanımlar.
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.
Normal ifade deseni ^.*$
aşağıdaki tabloda gösterildiği gibi tanımlanır.
Desen | Description |
---|---|
^ |
Satırın başlangıcıyla eşleş. (Nesnenin Regex örneği, seçeneği kullanılarak oluşturulduğunu RegexOptions.Multiline unutmayın; aksi takdirde, bu karakter sınıfı yalnızca giriş dizesinin başlangıcıyla eşleşecekti.) |
.* |
Herhangi bir karakteri sıfır veya daha fazla kez eşleştirin. |
$ |
Satırın sonunu eşleştirin. (Nesnenin Regex örneği, seçeneği kullanılarak oluşturulduğunu RegexOptions.Multiline unutmayın; aksi takdirde, bu karakter sınıfı yalnızca giriş dizesinin başlangıcıyla eşleşecekti.) |
Değiştirme dizesi (vbCrLf + "$&"
Visual Basic'te, "\n$&"
C# dilinde), eşleşen dizeden önce yeni bir satır ekler. \n
C# örneğinde C# derleyicisi tarafından yeni satır karakteri olarak yorumlandığını unutmayın; normal ifade karakter kaçışını temsil etmez.
Açıklamalar
Eşleşme araması, dizede input
parametresi tarafından startat
belirtilen konumda başlar. Normal ifade, geçerli Regex nesne için oluşturucu tarafından tanımlanan desendir. Negatifse count
, değiştirmeler dizenin sonuna kadar devam eder. Eşleşme sayısını aşarsa count
, tüm eşleşmeler değiştirilir.
hakkında startat
daha fazla ayrıntı için öğesinin Açıklamalar bölümüne Match(String, Int32)bakın.
parametresi içindeki replacement
her eşleşmenin input
değiştirilme dizesini belirtir. replacement
değişmez metin ve değiştirmelerin herhangi bir bileşiminden oluşabilir. Örneğin, değiştirme deseni a*${test}b
"a*" dizesini ve ardından yakalama grubu tarafından eşleşen alt dizeyi test
(varsa) ve ardından "b" dizesini ekler. * karakteri, değiştirme deseni içinde meta karakter olarak tanınmaz.
Not
Değiştirmeler, değiştirme deseninde tanınan tek normal ifade dili öğeleridir. Karakter kaçışları da dahil olmak üzere diğer tüm normal ifade dili öğelerine yalnızca normal ifade desenlerinde izin verilir ve değiştirme desenlerinde tanınmaz.
Değiştirme RegexMatchTimeoutException işleminin yürütme süresi oluşturucu tarafından Regex.Regex(String, RegexOptions, TimeSpan) belirtilen zaman aşımı aralığını aşarsa özel durum oluşturulur. Oluşturucuyu çağırdığınızda zaman aşımı aralığı ayarlamazsanız, işlem nesnenin oluşturulduğu uygulama etki alanı Regex için belirlenen zaman aşımı değerini aşarsa özel durum oluşturulur. Oluşturucu çağrısında Regex veya uygulama etki alanının özelliklerinde zaman aşımı tanımlanmadıysa veya zaman aşımı değeri ise Regex.InfiniteMatchTimeout, özel durum oluşturmaz
Eşleşme yoksa yöntemi input
değişmediği için yöntemini kullanarak yöntemin Object.ReferenceEquals giriş dizesinde herhangi bir değişiklik yapıp yapmadığını belirleyebilirsiniz.
Ayrıca bkz.
Şunlara uygulanır
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin