Regex 类
本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

Regex 类

 

表示不可变的正则表达式。

若要浏览此类型的.NET Framework 源代码,请参阅 Reference Source

命名空间:   System.Text.RegularExpressions
程序集:  System(System.dll 中)


[SerializableAttribute]
public class Regex : ISerializable

名称说明
System_CAPS_protmethodRegex()

初始化 Regex 类的新实例。

System_CAPS_protmethodRegex(SerializationInfo, StreamingContext)

使用序列化数据初始化 Regex 类的新实例。

System_CAPS_pubmethodRegex(String)

新实例初始化 Regex 为指定的正则表达式类。

System_CAPS_pubmethodRegex(String, RegexOptions)

新实例初始化 Regex 为指定的正则表达式,用修改模式的选项。

System_CAPS_pubmethodRegex(String, RegexOptions, TimeSpan)

新实例初始化 Regex 为指定的正则表达式,修改模式和一个值,指定多长时间的模式匹配方法的选项的类应进行匹配尝试超时之前。

名称说明
System_CAPS_pubpropertySystem_CAPS_staticCacheSize

获取或设置已编译的正则表达式的当前静态缓存中的最大项数。

System_CAPS_pubpropertyMatchTimeout

获取当前实例的超时间隔。

System_CAPS_pubpropertyOptions

获取已传入的选项 Regex 构造函数。

System_CAPS_pubpropertyRightToLeft

获取一个值,该值指示正则表达式是否从右向左进行搜索。

名称说明
System_CAPS_pubmethodSystem_CAPS_staticCompileToAssembly(RegexCompilationInfo[], AssemblyName)

将一个或多个指定编译 Regex 命名的程序集的对象。

System_CAPS_pubmethodSystem_CAPS_staticCompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[])

将一个或多个指定编译 Regex 与具有指定特性名称的程序集的对象。

System_CAPS_pubmethodSystem_CAPS_staticCompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String)

将一个或多个指定编译 Regex 对象和指定的资源文件与具有指定特性名称的程序集。

System_CAPS_pubmethodEquals(Object)

确定指定的对象是否等于当前对象。(从 Object 继承。)

System_CAPS_pubmethodSystem_CAPS_staticEscape(String)

通过替换为转义码来转义最小的字符集(\、*、+、?、|、{、[、(、)、^、$、.、# 和空白)。 这将指示正则表达式引擎按原义解释这些字符而不是解释为元字符。

System_CAPS_protmethodFinalize()

在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。(从 Object 继承。)

System_CAPS_pubmethodGetGroupNames()

返回正则表达式的捕获组名数组。

System_CAPS_pubmethodGetGroupNumbers()

返回与数组中的组名相对应的捕获组号的数组。

System_CAPS_pubmethodGetHashCode()

作为默认哈希函数。(从 Object 继承。)

System_CAPS_pubmethodGetType()

获取当前实例的 Type(从 Object 继承。)

System_CAPS_pubmethodGroupNameFromNumber(Int32)

获取与指定组号相对应的组名。

System_CAPS_pubmethodGroupNumberFromName(String)

返回与指定组名相对应的组号。

System_CAPS_protmethodInitializeReferences()

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用 Regex 对象生成的 CompileToAssembly 方法。

System_CAPS_pubmethodIsMatch(String)

该值指示是否在指定的正则表达式 Regex 构造函数指定的输入字符串中找到的匹配项。

System_CAPS_pubmethodIsMatch(String, Int32)

该值指示是否在指定的正则表达式 Regex 构造函数从字符串中的指定起始位置开始对指定输入字符串中找到的匹配项。

System_CAPS_pubmethodSystem_CAPS_staticIsMatch(String, String)

指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项。

System_CAPS_pubmethodSystem_CAPS_staticIsMatch(String, String, RegexOptions)

指示所指定的正则表达式是否使用指定的匹配选项在指定的输入字符串中找到了匹配项。

System_CAPS_pubmethodSystem_CAPS_staticIsMatch(String, String, RegexOptions, TimeSpan)

指示所指定的正则表达式是否使用指定的匹配选项和超时间隔在指定的输入字符串中找到了匹配项。

System_CAPS_pubmethodMatch(String)

搜索指定的输入的字符串中指定的正则表达式的第一个匹配项 Regex 构造函数。

System_CAPS_pubmethodMatch(String, Int32)

从输入字符串中的指定起始位置开始,在该字符串中搜索正则表达式的第一个匹配项。

System_CAPS_pubmethodMatch(String, Int32, Int32)

从指定的起始位置开始,在输入字符串中搜索正则表达式的第一个匹配项,并且仅搜索指定数量的字符。

System_CAPS_pubmethodSystem_CAPS_staticMatch(String, String)

在指定的输入字符串中搜索指定的正则表达式的第一个匹配项。

System_CAPS_pubmethodSystem_CAPS_staticMatch(String, String, RegexOptions)

使用指定的匹配选项在输入字符串中搜索指定的正则表达式的第一个匹配项。

System_CAPS_pubmethodSystem_CAPS_staticMatch(String, String, RegexOptions, TimeSpan)

使用指定的匹配选项和超时间隔在输入字符串中搜索指定的正则表达式的第一个匹配项。

System_CAPS_pubmethodMatches(String)

在指定的输入字符串中搜索正则表达式的所有匹配项。

System_CAPS_pubmethodMatches(String, Int32)

从字符串中的指定起始位置开始,在指定的输入字符串中搜索正则表达式的所有匹配项。

System_CAPS_pubmethodSystem_CAPS_staticMatches(String, String)

在指定的输入字符串中搜索指定的正则表达式的所有匹配项。

System_CAPS_pubmethodSystem_CAPS_staticMatches(String, String, RegexOptions)

使用指定的匹配选项在指定的输入字符串中搜索指定的正则表达式的所有匹配项。

System_CAPS_pubmethodSystem_CAPS_staticMatches(String, String, RegexOptions, TimeSpan)

使用指定的匹配选项和超时间隔在指定的输入字符串中搜索指定的正则表达式的所有匹配项。

System_CAPS_protmethodMemberwiseClone()

创建当前 Object 的浅表副本。(从 Object 继承。)

System_CAPS_pubmethodReplace(String, MatchEvaluator)

在指定的输入字符串替换与指定的正则表达式返回的字符串匹配的所有字符串 MatchEvaluator 委托。

System_CAPS_pubmethodReplace(String, MatchEvaluator, Int32)

在指定的输入字符串替换与正则表达式模式匹配与返回的字符串的字符串指定的最大 MatchEvaluator 委托。

System_CAPS_pubmethodReplace(String, MatchEvaluator, Int32, Int32)

在指定的输入子字符串替换与正则表达式模式匹配与返回的字符串的字符串指定的最大 MatchEvaluator 委托。

System_CAPS_pubmethodReplace(String, String)

在指定的输入字符串内,使用指定的替换字符串替换与某个正则表达式模式匹配的所有的字符串。

System_CAPS_pubmethodReplace(String, String, Int32)

在指定输入字符串内,使用指定替换字符串替换与某个正则表达式模式匹配的字符串(其数目为指定的最大数目)。

System_CAPS_pubmethodReplace(String, String, Int32, Int32)

在指定输入子字符串内,使用指定替换字符串替换与某个正则表达式模式匹配的字符串(其数目为指定的最大数目)。

System_CAPS_pubmethodSystem_CAPS_staticReplace(String, String, MatchEvaluator)

在指定的输入字符串中,使用由 MatchEvaluator 委托返回的字符串替换与指定的正则表达式匹配的所有字符串。

System_CAPS_pubmethodSystem_CAPS_staticReplace(String, String, MatchEvaluator, RegexOptions)

在指定的输入字符串中,使用由 MatchEvaluator 委托返回的字符串替换与指定的正则表达式匹配的所有字符串。 指定的选项将修改匹配操作。

System_CAPS_pubmethodSystem_CAPS_staticReplace(String, String, MatchEvaluator, RegexOptions, TimeSpan)

在指定的输入字符串中,使用由 MatchEvaluator 委托返回的字符串替换与指定的正则表达式匹配的所有子字符串。 如果未找到匹配项,则其他参数指定修改匹配操作的选项和超时间隔。

System_CAPS_pubmethodSystem_CAPS_staticReplace(String, String, String)

在指定的输入字符串内,使用指定的替换字符串替换与指定正则表达式匹配的所有字符串。

System_CAPS_pubmethodSystem_CAPS_staticReplace(String, String, String, RegexOptions)

在指定的输入字符串内,使用指定的替换字符串替换与指定正则表达式匹配的所有字符串。 指定的选项将修改匹配操作。

System_CAPS_pubmethodSystem_CAPS_staticReplace(String, String, String, RegexOptions, TimeSpan)

在指定的输入字符串内,使用指定的替换字符串替换与指定正则表达式匹配的所有字符串。 如果未找到匹配项,则其他参数指定修改匹配操作的选项和超时间隔。

System_CAPS_pubmethodSplit(String)

将输入的字符串拆分为一个定义在由正则表达式模式中指定的位置的子字符串数组 Regex 构造函数。

System_CAPS_pubmethodSplit(String, Int32)

输入字符串拆分为指定的最大次数的子字符串,定义正则表达式中指定的位置的数组 Regex 构造函数。

System_CAPS_pubmethodSplit(String, Int32, Int32)

输入字符串拆分为指定的最大次数的子字符串,定义正则表达式中指定的位置的数组 Regex 构造函数。 从输入字符串的指定字符位置开始搜索正则表达式模式。

System_CAPS_pubmethodSystem_CAPS_staticSplit(String, String)

在由正则表达式模式定义的位置将输入字符串拆分为一个子字符串数组。

System_CAPS_pubmethodSystem_CAPS_staticSplit(String, String, RegexOptions)

在由指定正则表达式模式定义的位置将输入字符串拆分为一个子字符串数组。 指定的选项将修改匹配操作。

System_CAPS_pubmethodSystem_CAPS_staticSplit(String, String, RegexOptions, TimeSpan)

在由指定正则表达式模式定义的位置将输入字符串拆分为一个子字符串数组。 如果未找到匹配项,则其他参数指定修改匹配操作的选项和超时间隔。

System_CAPS_pubmethodToString()

返回传入的正则表达式模式 Regex 构造函数。(替代 Object.ToString()。)

System_CAPS_pubmethodSystem_CAPS_staticUnescape(String)

转换输入字符串中的任何转义字符。

System_CAPS_protmethodUseOptionC()

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用 Regex 对象生成的 CompileToAssembly 方法。

System_CAPS_protmethodUseOptionR()

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用 Regex 对象生成的 CompileToAssembly 方法。

System_CAPS_protmethodSystem_CAPS_staticValidateMatchTimeout(TimeSpan)

此 API 支持 产品 基础结构,不能在代码中直接使用。 检查超时间隔是否在可接受的范围内。

名称说明
System_CAPS_protfieldcapnames

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用 Regex 对象生成的 CompileToAssembly 方法。

System_CAPS_protfieldcaps

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用 Regex 对象生成的 CompileToAssembly 方法。

System_CAPS_protfieldcapsize

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用 Regex 对象生成的 CompileToAssembly 方法。

System_CAPS_protfieldcapslist

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用 Regex 对象生成的 CompileToAssembly 方法。

System_CAPS_protfieldfactory

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用 Regex 对象生成的 CompileToAssembly 方法。

System_CAPS_pubfieldSystem_CAPS_staticInfiniteMatchTimeout

指定模式匹配操作不应超时。

System_CAPS_protfieldinternalMatchTimeout

此 API 支持 产品 基础结构,不能在代码中直接使用。 操作超时之前在一个模式匹配操作中可以经过的最长时间。

System_CAPS_protfieldpattern

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用 Regex 对象生成的 CompileToAssembly 方法。

System_CAPS_protfieldroptions

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用 Regex 对象生成的 CompileToAssembly 方法。

名称说明
System_CAPS_pubinterfaceSystem_CAPS_privmethodISerializable.GetObjectData(SerializationInfo, StreamingContext)

此 API 支持 产品 基础结构,不能在代码中直接使用。 使用所需的数据填充 SerializationInfo 对象来反序列化当前 Regex 对象。

System_CAPS_note注意

若要查看此类型的.NET Framework 源代码,请参阅 Reference Source 您可以浏览源代码、 下载脱机查看参考资料和调试; 在逐句通过源 (包括修补程序和更新)see instructions.

Regex 类表示.NET Framework 正则表达式引擎。 可用于快速分析大量文本以找出特定的字符模式;若要提取、 编辑、 替换或删除文本子字符串;并将提取的字符串添加到集合以生成报告。

System_CAPS_note注意

如果您的主要兴趣是通过确定它是否符合特定的模式来验证一个字符串,则可以使用 System.Configuration.RegexStringValidator 类。

若要使用的正则表达式,您将定义您想要在文本流中使用中所述的语法的识别模式 正则表达式语言 - 快速参考 接下来,您可以根据需要实例化 Regex 对象。 最后,调用执行某些操作,如用来替换与正则表达式模式匹配的文本或识别模式匹配的方法。

System_CAPS_note注意

一些常见的正则表达式模式,请参阅 正则表达式示例 此外还有许多正则表达式模式,例如在一个联机库 Regular-Expressions.info


有关使用 Regex 类,请参阅本主题中的下列部分 ︰

有关正则表达式语言的更多信息,请参见正则表达式语言 - 快速参考或下载和打印这些小册子中的一个:

      Quick Reference in Word (.docx) format
Quick Reference in PDF (.pdf) format

System.String 类包括几种可用来执行使用文本模式匹配的搜索和比较的方法。 例如, String.Contains, ,String.EndsWith, ,和 String.StartsWith 方法确定字符串实例是否包含指定的子字符串; 与 String.IndexOf, ,String.IndexOfAny, ,String.LastIndexOf, ,和 String.LastIndexOfAny 方法返回一个字符串中指定的子字符串的起始位置。 使用的方法 System.String 类时要搜索特定字符串。 使用 Regex 类搜索字符串中的特定模式时。 有关更多信息和示例,请参见.NET Framework 正则表达式

返回到备注

定义正则表达式模式后,您可以为其提供给正则表达式引擎在两种方法之一 ︰

  • 通过实例化 Regex 表示正则表达式的对象。 若要执行此操作,您将传递到正则表达式模式 Regex 构造函数。 一个 Regex 对象是不可变; 当您实例化 Regex 对象使用正则表达式,不能更改对象的正则表达式。

  • 通过提供的正则表达式和要搜索的文本来 static (Shared 在 Visual Basic 中) Regex 方法。 这使您可以使用正则表达式,而无需显式创建 Regex 对象。

所有 Regex 模式标识方法包括这两个静态和实例的重载。

正则表达式引擎必须编译某一特定模式,然后才能使用该模式。 因为 Regex 对象是不可变,这是一个一次性的过程发生时 Regex 调用类构造函数或静态方法。 若要消除重复编译单个正则表达式的需求,正则表达式引擎会缓存静态方法调用中使用的已编译的正则表达式。 结果是,正则表达式模式匹配方法将提供相当性能适用于静态和实例方法。

System_CAPS_important重要事项

在.NET Framework 版本 1.0 和 1.1 中,所有已编译正则表达式是否已使用实例或静态方法中调用,缓存。 从.NET Framework 2.0 开始,只有静态方法调用中使用正则表达式进行缓存。

但是,缓存会影响以下两种情况下的性能 ︰

  • 当有大量的正则表达式使用静态方法调用。 默认情况下,正则表达式引擎会缓存 15 的最近使用过静态正则表达式。 如果您的应用程序使用 15 个以上的静态正则表达式,则必须重新编译某些正则表达式。 若要防止此类重新编译,可以增加 Regex.CacheSize 属性。

  • 当您实例化新 Regex 具有先前已编译的正则表达式的对象。 例如,下面的代码定义在文本流中找到重复的单词的正则表达式。 虽然本示例使用单个正则表达式,它实例化一个新 Regex 对象来处理每个文本行。 这会导致循环的每次迭代时重新编译的正则表达式。

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

    若要防止重新编译,您应实例化一个 Regex 对象,它是可访问的所有代码都需要,重写下面的示例中所示。

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

返回到备注

你是否决定要实例化 Regex 对象并调用其方法或调用静态方法, Regex 类提供了以下模式匹配功能 ︰

  • 验证的匹配项。 您调用 IsMatch 方法,以确定是否存在匹配项。

  • 检索单个匹配项。 您调用 Match 方法来检索 Match 对象,表示在一个字符串或字符串的一部分中第一个匹配项。 可以通过调用检索后续匹配项 Match.NextMatch 方法。

  • 检索的所有匹配项。 您调用 Matches 方法来检索 System.Text.RegularExpressions.MatchCollection 对象,表示在一个字符串或字符串的一部分中找到的所有匹配项。

  • 替换匹配的文本。 您调用 Replace 方法用于替换匹配的文本。 也可由正则表达式定义的替换文本。 此外,某些 Replace 方法包括 MatchEvaluator 参数,它允许您以编程方式定义的替换文本。

  • 创建从输入字符串的部分构成的字符串数组。 您调用 Split 方法拆分输入的字符串与正则表达式定义的位置。

除了其模式匹配方法, Regex 类包括了一些特殊用途方法 ︰

  • Escape 方法可转义可能被解释为正则表达式或输入的字符串中的正则表达式运算符的任何字符。

  • Unescape 方法移除这些转义字符。

  • CompileToAssembly 方法创建包含预定义的正则表达式的程序集。 .NET Framework 包含在这些特殊用途的程序集的示例 System.Web.RegularExpressions 命名空间。

返回到备注

.NET Framework 支持一种提供可观的用电而又灵活的模式匹配的全功能正则表达式语言。 但是,功能和灵活性是需要付出代价 ︰ 性能不佳的风险。 性能低下的正则表达式是创建起来极其方便。 在某些情况下,依赖过多使用回溯的正则表达式操作似乎停止响应时它们处理与正则表达式模式近似匹配的文本。 有关.NET Framework 正则表达式引擎的详细信息,请参阅 正则表达式行为的详细信息 过多使用回溯的详细信息,请参阅 正则表达式中的回溯

从开始 .NET Framework 4.5, ,你可以为正则表达式匹配定义超时间隔。 如果正则表达式引擎不能识别在此时间间隔内的匹配项,匹配的操作会引发 RegexMatchTimeoutException 异常。 在大多数情况下,这样可以防止正则表达式引擎尝试匹配与正则表达式模式近似匹配的文本而浪费处理能力。 它还可能表示,但是,具有已超时间隔设置得太低,或当前机负载的性能,导致总体性能降低。

如何处理异常取决于异常的原因。 如果因为超时间隔设置得太低,则会发生异常或由于负载过多的计算机,您可以增大超时间隔,然后重试匹配操作。 如果由于正则表达式依赖于过度回溯的约束,则会发生异常,可以假定不存在匹配项,并 (可选) 你可以记录信息将帮助您修改正则表达式模式。

可以通过调用设置的超时间隔 Regex(String, RegexOptions, TimeSpan) 构造函数实例化正则表达式对象时。 对于静态方法,您可以通过调用具有匹配方法的重载中设置的超时间隔 matchTimeout 参数。 如果未显式设置的超时值,默认的超时值确定,如下所示 ︰

  • 通过使用应用程序级超时值,如果一个存在。 这可以是任何适用于在其中的应用程序域的超时值 Regex 实例化对象或调用静态方法。 可以通过调用设置整个应用程序范围的超时值 AppDomain.SetData 方法将指定的字符串表示形式 TimeSpan "REGEX_DEFAULT_MATCH_TIMEOUT"属性值。

  • 通过使用值 InfiniteMatchTimeout, ,如果设置整个应用程序范围的超时值。

System_CAPS_important重要事项

我们建议在所有正则表达式模式匹配操作设置超时值。 有关详细信息,请参阅.NET Framework 中的正则表达式的最佳做法

返回到备注

下面的示例使用正则表达式来检查重复出现的字符串中的单词。 正则表达式 \b(?<word>\w+)\s+(\k<word>)\b 可以解释为下表中所示。

模式

描述

\b

开始在字边界匹配。

(?<word>\w+)

匹配一个或多个单词字符,最多在单词边界。 命名此捕获的组 word

\s+

匹配一个或多个空白字符。

(\k<word>)

与名为捕获的组匹配 word

\b

与字边界匹配。

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

下面的示例说明了要检查一个字符串,或者表示货币值,或者是否具有正确的格式来表示货币值的正则表达式的使用。 在这种情况下,正则表达式从动态生成 NumberFormatInfo.CurrencyDecimalSeparator, ,CurrencyDecimalDigits, ,NumberFormatInfo.CurrencySymbol, ,NumberFormatInfo.NegativeSign, ,和 NumberFormatInfo.PositiveSign 为用户的当前区域性的属性。 如果使用系统的当前区域性为 EN-US,所得到的正则表达式是 ^\s*[\+-]?\s?\$?\s?(\d*\.?\d{2}?){1}$ 下表中所示,可以解释此正则表达式。

模式

描述

^

从字符串的开头开始。

\s*

匹配零个或多个空白字符。

[\+-]?

匹配正号或负号的零个或一个匹配的项。

\s?

匹配零个或一个空白字符。

\$?

匹配零个或一个匹配项的美元符号。

\s?

匹配零个或一个空白字符。

\d*

匹配零个或多个十进制数字。

\.?

匹配零个或一个小数点符号。

\d{2}?

与两个十进制数字匹配零个或一个时间。

(\d*\.?\d{2}?){1}

匹配以下模式 ︰ 至少一次隔开小数点符号的整数和小数位数。

$

匹配字符串的末尾。

在这种情况下,正则表达式假定有效货币字符串不包含组分隔符,并且还没有小数部分位数或小数位数由当前区域性定义数 CurrencyDecimalDigits 属性。

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.

在此示例中的正则表达式动态生成的因为我们不知道在设计时是否当前区域性的货币符号、 小数点符号或正和负号可能被错误解释的正则表达式引擎为正则表达式语言运算符。 若要防止任何解释错误,该示例将为每个动态生成的字符串 Escape 方法。

Universal Windows Platform
8 后可用
.NET Framework
1.1 后可用
Portable Class Library
受以下版本支持:portable .NET platforms
Silverlight
2.0 后可用
Windows Phone Silverlight
7.0 后可用
Windows Phone
8.1 后可用

Regex 类是不可变 (只读) 和线程安全。 Regex 可以在任何线程上创建和线程之间共享对象。 有关详细信息,请参阅正则表达式中的线程安全

返回页首
显示:
© 2016 Microsoft