C#:循环遍历字符串中的子字符串模式

时间:2010-06-15 16:34:59

标签: c# regex string

我的模式如下:

  

{(代码)}
  代码是一个数字(最多6位数),或2个字母后跟数字   例如:

{(45367)}
{(265367)}
{(EF127012)}

我想在长字符串中找到所有出现的内容,我不能只使用纯正则表达式,因为我需要在找到匹配项时执行某些操作(比如记录位置和匹配类型)。

5 个答案:

答案 0 :(得分:5)

您所指的内容仍然可以使用正则表达式完成。请尝试以下方法......

Regex regex = new Regex(@"\{\(([A-Z]{2}\d{1,6}|\d{1,6})\)\}");
String test = @"my pattern is the following:
  

我想在长字符串中找到所有出现的内容

var matches = regex.Matches(test);
foreach (Match match in matches)
{
    MessageBox.Show(String.Format("\"{0}\" found at position {1}.", match.Value, match.Index));
}

我希望有所帮助。

答案 1 :(得分:1)

\{\(([A-Z]{2})?\d{1,6}\)\}
\{           # a literal { character
\(           # a literal ( character
(            # group 1
  [A-Z]{2}   #   letters A-Z, exactly two times
)?           # end group 1, make optional
\d{1,6}      # digits 0-9, at least one, up to six
\)           # a literal ) character
\}           # a literal } character

答案 2 :(得分:1)

将MatchEvaluator与正则表达式一起使用以获取匹配的位置和类型。

http://en.csharp-online.net/CSharp_Regular_Expression_Recipes%E2%80%94Augmenting_the_Basic_String_Replacement_Function

答案 3 :(得分:0)

未经编译和未经测试的代码示例

public void LogMatches( string inputText )
{
    var @TomalaksPattern = @"\{\(([A-Z]{2})?\d{6}\)\}"; // trusting @Tomalak on this, didn't verify
    MatchCollection matches = Regex.Matches( inputText, @TomalaksPattern );
    foreach( Match m in matches )
    {
        if( Regex.Match( m.Value, @"\D" ).Success )
             Log( "Letter type match {0} at index {1}", m.Value, m.Index );
        else
            Log( "No letters match {0} at index {1}", m.Value, m.Index );
    }
}

答案 4 :(得分:0)

foreach (Match m in Regex.Matches(yourString, @"(?:[A-Za-z]{2})?\d{1,6}"))
{
    Console.WriteLine("Index=" + m.Index + ", Value=" + m.Value);
}