Representa uma expressão regular imutável.
System.Text.RegularExpressions.Regex
Mais... Namespace: System.Text.RegularExpressions
Assembly: System (em System.dll)
<SerializableAttribute> _ Public Class Regex _ Implements ISerializable
[SerializableAttribute] public class Regex : ISerializable
[SerializableAttribute] public ref class Regex : ISerializable
[<SerializableAttribute>] type Regex = class interface ISerializable end
O tipo Regex expõe os membros a seguir.
| Nome | Descrição | |
|---|---|---|
|
Regex | Initializes a new instance of the Regex class. |
|
Regex(String) | Inicializa e compila uma nova instância de Regex classe da expressão regular especificada. |
|
Regex(SerializationInfo, StreamingContext) | Inicializa uma nova instância da Regex classe usando serializado dados. |
|
Regex(String, RegexOptions) | Inicializa e compila uma nova instância de Regex classe para a expressão regular especificada com opções que modificam o padrão. |
| Nome | Descrição | |
|---|---|---|
|
CacheSize | Obtém ou define o número máximo de entradas no cache atual estático compilado expressões regulares. |
|
Options | Retorna as opções passadas para o Regex construtor. |
|
RightToLeft | Obtém um valor indicando se a expressão regular procura da direita para esquerda. |
| Nome | Descrição | |
|---|---|---|
|
CompileToAssembly(RegexCompilationInfo(), AssemblyName) | Compila um ou mais especificado Regex objetos para um conjunto nomeado. |
|
CompileToAssembly(RegexCompilationInfo(), AssemblyName, CustomAttributeBuilder()) | Compila um ou mais especificado Regex objetos a um conjunto nomeado com atributos especificados. |
|
CompileToAssembly(RegexCompilationInfo(), AssemblyName, CustomAttributeBuilder(), String) | Compila um ou mais especificado Regex objetos e um arquivo de recurso especificado para um conjunto nomeado com atributos especificados. |
|
Equals(Object) | Determina se o Object especificado é igual ao Object atual. (Herdado de Object.) |
|
Escape | Expõe um conjunto mínimo de caracteres (\, *, +,?, |, {, [, (,), ^, $,., # e espaços em branco) substituindo-os por seus códigos de escape. Isso instrui o mecanismo de expressões regulares para interpretar esses caracteres, literalmente, em vez de como metacaracteres. |
|
Finalize | Permite que um objeto tente liberar recursos e executar outras operações de limpeza antes que ele seja recuperado pela coleta de lixo. (Herdado de Object.) |
|
GetGroupNames | Retorna uma matriz de nomes de grupo para a expressão regular de captura. |
|
GetGroupNumbers | Retorna uma matriz de números de grupo que correspondem aos nomes de grupo em uma matriz de captura. |
|
GetHashCode | Serve como uma função hash para um tipo específico. (Herdado de Object.) |
|
GetType |
|
|
GroupNameFromNumber | Obtém o nome de grupo que corresponde ao número de grupo especificado. |
|
GroupNumberFromName | Retorna o número de grupo que corresponde ao nome do grupo especificado. |
|
InitializeReferences | Infraestrutura. Usado por um Regex objeto gerado pelo CompileToAssembly método. |
|
IsMatch(String) | Indica se a expressão regular especificado na Regex construtor encontra uma correspondência em uma seqüência de entrada especificada. |
|
IsMatch(String, Int32) | Indica se a expressão regular especificado na Regex construtor encontra uma correspondência da seqüência de entrada especificada, começando na posição inicial especificada na seqüência de caracteres. |
|
IsMatch(String, String) | Indica se a expressão regular especificada encontra uma correspondência na seqüência de caracteres de entrada especificada. |
|
IsMatch(String, String, RegexOptions) | Indica se a expressão regular especificada encontra uma correspondência da seqüência de entrada especificada, usando as opções correspondentes especificadas. |
|
Match(String) | Procura a seqüência de entrada especificada para a primeira ocorrência da expressão regular especificada no Regex construtor. |
|
Match(String, Int32) | Procura a seqüência de entrada para a primeira ocorrência de uma expressão regular, começando na posição inicial especificada na seqüência de caracteres. |
|
Match(String, String) | Procura a seqüência de entrada especificada para a primeira ocorrência da expressão regular especificada. |
|
Match(String, Int32, Int32) | Procura a seqüência de entrada para a primeira ocorrência de uma expressão regular, começando na posição inicial e especificados somente para o número especificado de caracteres de pesquisa. |
|
Match(String, String, RegexOptions) | Procura a seqüência de entrada para a primeira ocorrência da expressão regular especificado, usando as opções correspondentes especificadas. |
|
Matches(String) | Procura a seqüência de entrada especificada para todas as ocorrências de uma expressão regular. |
|
Matches(String, Int32) | Procura a seqüência de entrada especificada para todas as ocorrências de uma expressão regular, começando na posição inicial especificada na seqüência de caracteres. |
|
Matches(String, String) | Procura a seqüência de entrada especificada para todas as ocorrências de uma expressão regular especificada. |
|
Matches(String, String, RegexOptions) | Procura a seqüência de entrada especificada para todas as ocorrências de uma expressão regular especificada, usando as opções correspondentes especificadas. |
|
MemberwiseClone | Cria uma cópia superficial do Object atual. (Herdado de Object.) |
|
Replace(String, String) | Dentro de uma seqüência de entrada especificada, substitui todas as seqüências que correspondem um padrão de expressão regular com uma seqüência de caracteres de substituição especificado. |
|
Replace(String, MatchEvaluator) | Dentro de uma seqüência de entrada especificada, substitui todas as seqüências que correspondem a uma expressão regular especificada com uma seqüência de caracteres retornada por um MatchEvaluator delegate. |
|
Replace(String, String, Int32) | Dentro de uma seqüência de entrada especificada, substitui um número máximo especificado de seqüências de caracteres que correspondem um padrão de expressão regular com uma seqüência de caracteres de substituição especificado. |
|
Replace(String, String, String) | Dentro de uma seqüência de entrada especificada, substitui todas as seqüências que correspondem a uma expressão regular especificada com uma seqüência de caracteres de substituição especificado. |
|
Replace(String, String, MatchEvaluator) | Dentro de uma seqüência de entrada especificada, substitui todas as seqüências que correspondem a uma expressão regular especificada com uma seqüência de caracteres retornada por um MatchEvaluator delegate. |
|
Replace(String, MatchEvaluator, Int32) | Dentro de uma seqüência de entrada especificada, substitui um número máximo especificado de seqüências de caracteres que correspondem um padrão de expressão regular com uma seqüência de caracteres retornada por um MatchEvaluator delegate. |
|
Replace(String, String, Int32, Int32) | Dentro de uma subseqüência de entrada especificada, substitui um número máximo especificado de seqüências de caracteres que correspondem um padrão de expressão regular com uma seqüência de caracteres de substituição especificado. |
|
Replace(String, String, String, RegexOptions) | Dentro de uma seqüência de entrada especificada, substitui todas as seqüências que correspondem a uma expressão regular especificada com uma seqüência de caracteres de substituição especificado. Opções especificadas modificam a operação de correspondência. |
|
Replace(String, String, MatchEvaluator, RegexOptions) | Dentro de uma seqüência de entrada especificada, substitui todas as seqüências que correspondem a uma expressão regular especificada com uma seqüência de caracteres retornada por um MatchEvaluator delegate. Opções especificadas modificam a operação de correspondência. |
|
Replace(String, MatchEvaluator, Int32, Int32) | Dentro de uma subseqüência de entrada especificada, substitui um número máximo especificado de seqüências de caracteres que correspondem um padrão de expressão regular com uma seqüência de caracteres retornada por um MatchEvaluator delegate. |
|
Split(String) | Divide a seqüência de entrada especificada nas posições definidas por um padrão de expressão regular especificado na Regex construtor. |
|
Split(String, Int32) | Divisões um máximo número de vezes especificado nas posições definidas por uma expressão regular especificada na seqüência da entrada especificada do Regex construtor. |
|
Split(String, String) | Divide a seqüência de caracteres de entrada nas posições definidas por um padrão de expressão regular. |
|
Split(String, Int32, Int32) | Divisões um máximo número de vezes especificado nas posições definidas por uma expressão regular especificada na seqüência da entrada especificada do Regex construtor. A busca pelo padrão de expressão regular é iniciado em uma posição de caractere especificado na seqüência de entrada. |
|
Split(String, String, RegexOptions) | Divide a seqüência de caracteres de entrada nas posições definidas por um padrão de expressão regular especificada. Opções especificadas modificam a operação de correspondência. |
|
ToString | Retorna o padrão de expressão regular que foi passado para o Regex construtor. (Substitui Object.ToString.) |
|
Unescape | Converte caracteres de escape na seqüência de entrada. |
|
UseOptionC | Infraestrutura. Usado por um Regex objeto gerado pelo CompileToAssembly método. |
|
UseOptionR | Infraestrutura. Usado por um Regex objeto gerado pelo CompileToAssembly método. |
| Nome | Descrição | |
|---|---|---|
|
capnames | Infraestrutura. Usado por um Regex objeto gerado pelo CompileToAssembly método. |
|
caps | Infraestrutura. Usado por um Regex objeto gerado pelo CompileToAssembly método. |
|
capsize | Infraestrutura. Usado por um Regex objeto gerado pelo CompileToAssembly método. |
|
capslist | Infraestrutura. Usado por um Regex objeto gerado pelo CompileToAssembly método. |
|
factory | Infraestrutura. Usado por um Regex objeto gerado pelo CompileToAssembly método. |
|
pattern | Infraestrutura. Usado por um Regex objeto gerado pelo CompileToAssembly método. |
|
roptions | Infraestrutura. Usado por um Regex objeto gerado pelo CompileToAssembly método. |
| Nome | Descrição | |
|---|---|---|
|
ISerializable.GetObjectData | Infraestrutura. Preenche uma SerializationInfo o objeto com os dados necessários para desserializar atual Regex objeto. |
O Regex representa de classe a.Mecanismo de expressão regular do NET Framework. Ele pode ser usado para analisar rapidamente a grandes quantidades de texto para localizar padrões de caracteres específicos; para extrair, editar, substituir ou excluir texto substrings; ou para adicionar as seqüências de caracteres extraídas para uma coleção para gerar um relatório.
Observação
|
|---|
|
Se o seu interesse principal validar uma seqüência de caracteres, determinando se sigam um padrão específico, você pode usar o System.Configuration.RegexStringValidator classe. |
Para usar expressões regulares, você define o padrão que você deseja identificar um fluxo de texto usando a sintaxe documentada no Elementos de linguagem das expressões regulares. Em seguida, você pode opcionalmente instanciar um Regex objeto. Finalmente, você pode executar algumas operações, como, por exemplo, substituindo o texto que corresponda ao padrão de expressão regular ou uma correspondência de padrão de identificação.
Regex vs.Métodos de string
O System.String classe inclui vários métodos de comparação e de pesquisa que você pode usar para realizar de padrões coincidentes com o texto. Por exemplo, o String.Contains, String.EndsWith, e String.StartsWith métodos de determinam se uma ocorrência de string contém uma subseqüência especificada; e o String.IndexOf, String.IndexOfAny, String.LastIndexOf, e String.LastIndexOfAny métodos retornam a posição inicial de uma subseqüência especificada em uma seqüência de caracteres. Use os métodos da System.String classe quando você estiver procurando por uma seqüência específica. Use o Regex classe quando você estiver procurando por um padrão específico em uma seqüência de caracteres. For more information and examples, see Expressões Regulares do .NET Framework.
Estáticos vs.Instance Methods
Depois de definir um padrão de expressão regular, você pode fornecê-lo para o mecanismo de expressão regular de duas maneiras.
-
Instanciando um Regex objeto que representa a expressão regular. Para fazer isso, você passa o padrão de expressão regular para um Regex construtor. Um Regex objeto é imutável; Quando você instancia um Regex de objeto com uma expressão regular, que a expressão regular do objeto não pode ser alterado.
-
Fornecendo tanto a expressão regular como o texto a pesquisar para um static (Shared em Visual Basic) Regex método. Isso permite que você use uma expressão regular, sem criar explicitamente um Regex objeto.
Todos os Regex métodos de identificação padrão incluem estáticos e instância sobrecargas.
O mecanismo de expressão regular deve compilar um padrão específico para que o padrão que possa ser usado. Porque Regex são imutáveis, este é um único procedimento que ocorre quando um Regex o construtor de classe ou um método estático é chamado. Para eliminar a necessidade de compilar repetidamente uma única expressão regular, o mecanismo de expressão regular, armazena em cache as expressões regulares compiladas, usadas em chamadas de método estático. Como resultado, os métodos de correspondência de padrão de expressão regular oferecem um desempenho comparável estática e métodos de instância.
Importante
|
|---|
|
No.NET Framework versões 1.0 e 1.1, todos compilados expressões regulares, se elas foram usados em chamadas de método estático ou de instância, foram armazenados em cache. Começando com o.NET Framework 2.0, somente as expressões regulares utilizadas nas chamadas de método estático são armazenados em cache. |
No entanto, o sistema de cache implementado pelo mecanismo de expressão regular pode afetar negativamente o desempenho nos seguintes casos:
-
Quando você usa o método estático chamadas com um grande número de expressões regulares. Por padrão, o mecanismo de expressão regular caches 15 usadas recentemente expressões regulares estáticas. Se o seu aplicativo usa as expressões regulares mais de 15 estáticas, algumas expressões regulares devem ser recompilados. Para evitar essa recompilação, você pode aumentar a Regex.CacheSize propriedade para um valor apropriado.
-
Quando seu aplicativo instancia novas Regex objetos com expressões regulares que foram compilados anteriormente. Por exemplo, o código a seguir define uma expressão regular para localizar palavras duplicadas em linhas individuais de um fluxo de texto. Embora o exemplo usa uma única expressão regular, instancia um novo Regex o objeto para processar cada linha de texto. Isso resulta na recompilação da expressão regular com cada iteração do loop.
Visual BasicDim sr As New StreamReader(filename) Dim input As String Dim pattern As String = "\b(\w+)\s\1\b" Do While sr.Peek() >= 0 input = sr.ReadLine() Dim rgx As New Regex(pattern, RegexOptions.IgnoreCase) Dim matches As MatchCollection = rgx.Matches(input) If matches.Count > 0 Then Console.WriteLine("{0} ({1} matches):", input, matches.Count) For Each match As Match In matches Console.WriteLine(" " + match.Value) Next End If Loop sr.Close()
C#StreamReader sr = new StreamReader(filename); string input; string pattern = @"\b(\w+)\s\1\b"; while (sr.Peek() >= 0) { input = sr.ReadLine(); Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase); MatchCollection matches = rgx.Matches(input); if (matches.Count > 0) { Console.WriteLine("{0} ({1} matches):", input, matches.Count); foreach (Match match in matches) Console.WriteLine(" " + match.Value); } } sr.Close();
Para evitar a recompilação, o aplicativo deve instanciar um único Regex reescrita de objeto que está acessível a todos os códigos que exija, conforme mostrado no seguinte exemplo.
Visual BasicDim sr As New StreamReader(filename) Dim input As String Dim pattern As String = "\b(\w+)\s\1\b" Dim rgx As New Regex(pattern, RegexOptions.IgnoreCase) Do While sr.Peek() >= 0 input = sr.ReadLine() Dim matches As MatchCollection = rgx.Matches(input) If matches.Count > 0 Then Console.WriteLine("{0} ({1} matches):", input, matches.Count) For Each match As Match In matches Console.WriteLine(" " + match.Value) Next End If Loop sr.Close()
C#StreamReader sr = new StreamReader(filename); string input; string pattern = @"\b(\w+)\s\1\b"; Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase); while (sr.Peek() >= 0) { input = sr.ReadLine(); MatchCollection matches = rgx.Matches(input); if (matches.Count > 0) { Console.WriteLine("{0} ({1} matches):", input, matches.Count); foreach (Match match in matches) Console.WriteLine(" " + match.Value); } } sr.Close();
Executar operações de expressão Regular
Se você decidir criar uma instância de um Regex de objeto e chamar seus métodos ou chamar métodos estáticos, a Regex classe oferece as seguintes funcionalidades de correspondência de padrões:
-
Validação de uma correspondência. Você chamar o IsMatch método para determinar se uma correspondência está presente.
-
Recuperação de uma única correspondência. Você chamar o Match método para recuperar um Match objeto que representa a primeira correspondência em uma seqüência ou em parte de uma seqüência de caracteres. Correspondências subseqüentes podem ser recuperadas chamando o Match.NextMatch método.
-
Recuperação de todas as correspondências. Você chamar o Matches método para recuperar um System.Text.RegularExpressions.MatchCollection objeto que representa todas as correspondências encontradas em uma seqüência ou em parte de uma seqüência de caracteres.
-
Substituição de texto correspondente. Você chamar o Replace método para substituir o texto correspondente. O texto de substituição também pode ser definido por uma expressão regular. Além disso, alguns do Replace métodos incluem um MatchEvaluator parâmetro que permite que você programaticamente definir o texto de substituição.
-
Criação de uma matriz de cadeia de caracteres é formada de partes de uma seqüência de caracteres de entrada. Você chamar o Split método para dividir uma cadeia de entrada em posições que são definidos pela expressão regular.
Além de para seus métodos de correspondência de padrões, o Regex classe inclui vários métodos de propósito especial:
-
O Escape método expõe todos os caracteres que podem ser interpretados como operadores de expressões regulares em uma expressão regular ou seqüência de caracteres de entrada.
-
O Unescape método remove esses caracteres de escape.
-
O CompileToAssembly método cria um assembly que contém expressões regulares predefinidas. A.NET Framework contém exemplos desses assemblies de finalidade especial na System.Web.RegularExpressions namespace.
O exemplo a seguir usa uma expressão regular para verificar se há ocorrências repetidas de palavras em uma seqüência de caracteres. A expressão regular \b(?<word>\w+)\s+(\k<word>)\b podem ser interpretados como mostrado na tabela a seguir.
|
Pattern |
Descrição |
|---|---|
|
\b |
Inicie a correspondência de um limite de palavra. |
|
(?<word>\w+) |
Corresponde a um ou mais caracteres de palavra até o limite de palavra. Este grupo capturados word. |
|
\s+ |
Corresponde a um ou mais caracteres de espaço em branco. |
|
(\k<word>) |
Coincidir com o grupo capturado chamado word. |
|
\b |
Corresponde a um limite de palavra. |
Imports System Imports System.Text.RegularExpressions Public Module Test Public Sub Main() ' Define a regular expression for repeated words. Dim rx As New Regex("\b(?<word>\w+)\s+(\k<word>)\b", _ RegexOptions.Compiled Or RegexOptions.IgnoreCase) ' Define a test string. Dim text As String = "The the quick brown fox fox jumped over the lazy dog dog." ' Find matches. Dim matches As MatchCollection = rx.Matches(text) ' Report the number of matches found. Console.WriteLine("{0} matches found in:", matches.Count) Console.WriteLine(" {0}", text) ' Report on each match. For Each match As Match In matches Dim groups As GroupCollection = match.Groups Console.WriteLine("'{0}' repeated at positions {1} and {2}", _ groups.Item("word").Value, _ groups.Item(0).Index, _ groups.Item(1).Index) Next End Sub End Module ' The example produces the following output to the console: ' 3 matches found in: ' The the quick brown fox fox jumped over the lazy dog dog. ' 'The' repeated at positions 0 and 4 ' 'fox' repeated at positions 20 and 25 ' 'dog' repeated at positions 50 and 54
using System; using System.Text.RegularExpressions; public class Test { public static void Main () { // Define a regular expression for repeated words. Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); // Define a test string. string text = "The the quick brown fox fox jumped over the lazy dog dog."; // Find matches. MatchCollection matches = rx.Matches(text); // Report the number of matches found. Console.WriteLine("{0} matches found in:\n {1}", matches.Count, text); // Report on each match. foreach (Match match in matches) { GroupCollection groups = match.Groups; Console.WriteLine("'{0}' repeated at positions {1} and {2}", groups["word"].Value, groups[0].Index, groups[1].Index); } } } // The example produces the following output to the console: // 3 matches found in: // The the quick brown fox fox jumped over the lazy dog dog. // 'The' repeated at positions 0 and 4 // 'fox' repeated at positions 20 and 25 // 'dog' repeated at positions 50 and 54
#using <System.dll> using namespace System; using namespace System::Text::RegularExpressions; int main() { // Define a regular expression for repeated words. Regex^ rx = gcnew Regex( "\\b(?<word>\\w+)\\s+(\\k<word>)\\b",static_cast<RegexOptions>(RegexOptions::Compiled | RegexOptions::IgnoreCase) ); // Define a test string. String^ text = "The the quick brown fox fox jumped over the lazy dog dog."; // Find matches. MatchCollection^ matches = rx->Matches( text ); // Report the number of matches found. Console::WriteLine( "{0} matches found.", matches->Count ); // Report on each match. for each (Match^ match in matches) { String^ word = match->Groups["word"]->Value; int index = match->Index; Console::WriteLine("{0} repeated at position {1}", word, index); } }
O exemplo a seguir ilustra o uso de uma expressão regular para verificar se uma seqüência de caracteres representa um valor de moeda ou tem o formato correto para representar um valor monetário. Nesse caso, a expressão regular é criada dinamicamente a partir do NumberFormatInfo.CurrencyDecimalSeparator, CurrencyDecimalDigits, NumberFormatInfo.CurrencySymbol, NumberFormatInfo.NegativeSign, e NumberFormatInfo.PositiveSign Propriedades para a cultura atual. do usuário Se o sistema atual do cultura en-US, a expressão regular resultante é ^\s*[\+-]?\s?\$?\s?(\d*\.?\d{2}?){1}$. Essa expressão regular pode ser interpretado como mostrado na tabela a seguir.
|
Pattern |
Descrição |
|---|---|
|
^ |
Comece no início da seqüência de caracteres. |
|
\s* |
Corresponde a zero ou mais caracteres de espaço em branco. |
|
[\+-]? |
Corresponde a zero ou uma de ocorrência do sinal positivo ou o sinal negativo. |
|
\s? |
Corresponde a zero ou um caractere de espaço em branco. |
|
\$? |
Corresponde a zero ou uma de ocorrência do cifrão. |
|
\s? |
Corresponde a zero ou um caractere de espaço em branco. |
|
\d* |
Corresponde a zero ou mais dígitos decimais. |
|
\.? |
Corresponde a zero ou um símbolo de ponto decimal. |
|
\d{2}? |
Coincide com dois dígitos decimais zero ou uma vez. |
|
(\d*\.? \d{2}?){1} |
Coincide com o padrão de integrais e fracionários dígitos separados por um símbolo de ponto decimal que pelo menos uma vez. |
|
$ |
Corresponde ao final da seqüência de caracteres. |
Nesse caso, a expressão regular assume que uma seqüência de caracteres de unidade monetária válida não contém símbolos de separador de grupo e que ele tem o número de dígitos fracionários definido pela cultura atual ou de sem dígitos fracionais CurrencyDecimalDigits propriedade.
Imports System.Globalization Imports System.Text.RegularExpressions Public Module Example Public Sub Main() ' Get the current NumberFormatInfo object to build the regular ' expression pattern dynamically. Dim nfi As NumberFormatInfo = NumberFormatInfo.CurrentInfo ' Define the regular expression pattern. Dim pattern As String pattern = "^\s*[" ' Get the positive and negative sign symbols. pattern += Regex.Escape(nfi.PositiveSign + nfi.NegativeSign) + "]?\s?" ' Get the currency symbol. pattern += Regex.Escape(nfi.CurrencySymbol) + "?\s?" ' Add integral digits to the pattern. pattern += "(\d*" ' Add the decimal separator. pattern += Regex.Escape(nfi.CurrencyDecimalSeparator) + "?" ' Add the fractional digits. pattern += "\d{" ' Determine the number of fractional digits in currency values. pattern += nfi.CurrencyDecimalDigits.ToString() + "}?){1}$" Dim rgx As New Regex(pattern) ' Define some test strings. Dim tests() As String = {"-42", "19.99", "0.001", "100 USD", _ ".34", "0.34", "1,052.21", "$10.62", _ "+1.43", "-$0.23" } ' Check each test string against the regular expression. For Each test As String In tests If rgx.IsMatch(test) Then Console.WriteLine("{0} is a currency value.", test) Else Console.WriteLine("{0} is not a currency value.", test) End If Next End Sub End Module ' The example displays the following output: ' -42 is a currency value. ' 19.99 is a currency value. ' 0.001 is not a currency value. ' 100 USD is not a currency value. ' .34 is a currency value. ' 0.34 is a currency value. ' 1,052.21 is not a currency value. ' $10.62 is a currency value. ' +1.43 is a currency value. ' -$0.23 is a currency value.
using System; using System.Globalization; using System.Text.RegularExpressions; public class Example { public static void Main() { // Get the current NumberFormatInfo object to build the regular // expression pattern dynamically. NumberFormatInfo nfi = NumberFormatInfo.CurrentInfo; // Define the regular expression pattern. string pattern; pattern = @"^\s*["; // Get the positive and negative sign symbols. pattern += Regex.Escape(nfi.PositiveSign + nfi.NegativeSign) + @"]?\s?"; // Get the currency symbol. pattern += Regex.Escape(nfi.CurrencySymbol) + @"?\s?"; // Add integral digits to the pattern. pattern += @"(\d*"; // Add the decimal separator. pattern += Regex.Escape(nfi.CurrencyDecimalSeparator) + "?"; // Add the fractional digits. pattern += @"\d{"; // Determine the number of fractional digits in currency values. pattern += nfi.CurrencyDecimalDigits.ToString() + "}?){1}$"; Regex rgx = new Regex(pattern); // Define some test strings. string[] tests = { "-42", "19.99", "0.001", "100 USD", ".34", "0.34", "1,052.21", "$10.62", "+1.43", "-$0.23" }; // Check each test string against the regular expression. foreach (string test in tests) { if (rgx.IsMatch(test)) Console.WriteLine("{0} is a currency value.", test); else Console.WriteLine("{0} is not a currency value.", test); } } } // The example displays the following output: // -42 is a currency value. // 19.99 is a currency value. // 0.001 is not a currency value. // 100 USD is not a currency value. // .34 is a currency value. // 0.34 is a currency value. // 1,052.21 is not a currency value. // $10.62 is a currency value. // +1.43 is a currency value. // -$0.23 is a currency value.
Porque a expressão regular neste exemplo é criada dinamicamente, não sabemos em tempo de design se sinais positivos e negativos, decimal sinal ou símbolo de moeda da cultura atual podem ser mal interpretados pelo mecanismo de expressão regular como operadores de linguagem de expressão regular. Para evitar qualquer má interpretação, o exemplo passa cada seqüência de caracteres gerada dinamicamente para o Escape método.
.NET Framework
Com suporte em: 4, 3.5, 3.0, 2.0, 1.1, 1.0.NET Framework Client Profile
Com suporte em: 4, 3.5 SP1Windows 7, Windows Vista SP1 ou posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core não compatível), Windows Server 2008 R2 (Server Core não compatível com SP1 ou posterior), Windows Server 2003 SP2
O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos de sistema do .NET Framework.
O Regex classe é imutável (somente leitura) e thread safe. Regexobjetos podem ser criados em qualquer segmento e pode ser compartilhados entre segmentos. For more information, see Acesso thread-safe.
Referência
Outros recursos
|
Data |
Histórico |
Motivo |
|---|---|---|
|
Junho de 2010 |
Corrigido o padrão de expressão regular para lidar com o espaço em branco. |
Comentários do cliente. |
System.Text.RegularExpressions.Regex
System.Web.RegularExpressions.AspCodeRegex
System.Web.RegularExpressions.AspEncodedExprRegex
System.Web.RegularExpressions.AspExprRegex
System.Web.RegularExpressions.CommentRegex
System.Web.RegularExpressions.DatabindExprRegex
System.Web.RegularExpressions.DataBindRegex
System.Web.RegularExpressions.DirectiveRegex
System.Web.RegularExpressions.EndTagRegex
System.Web.RegularExpressions.GTRegex
System.Web.RegularExpressions.IncludeRegex
System.Web.RegularExpressions.LTRegex
System.Web.RegularExpressions.RunatServerRegex
System.Web.RegularExpressions.ServerTagsRegex
System.Web.RegularExpressions.SimpleDirectiveRegex
System.Web.RegularExpressions.TagRegex
System.Web.RegularExpressions.TagRegex35
System.Web.RegularExpressions.TextRegex
