我应该如何写一个正则表达式来匹配一个字符串与数字和一些特定的单词?

时间:2016-07-22 14:06:49

标签: c# regex

我有下一个正则表达式:

^\s*(\d+(\s*,\s*\d+)*)?\s*$

匹配下一个字符串:

  

“1,2,3”

我需要修改它以匹配具有一个特定单词的下一个字符串(忽略大小写):

  

“1,myword,3”

     

“myword,2,3”

     

“1,myword,3,myword”

如何添加其他支票组?

更新:Myword是可选的,可以重复几次或者在字符串的开头。

2 个答案:

答案 0 :(得分:1)

首先,您的原始正则表达式可以简化为^\s*((\d+|myword)\s*,\s*)*\(d+|myword)$,为了处理您想要的扩展程序,可以将其修改为{{1}}。

答案 1 :(得分:1)

您可以将\d+替换为(?:\d+|myword)。看看Alternation with The Vertical Bar or Pipe Symbol

  

如果您要搜索文字文本catdog,请使用竖线或竖线符号分隔这两个选项:cat|dog。如果您想要更多选项,只需展开列表:cat|dog|mouse|fish

要告诉正则表达式引擎我们只想替换\d+数字和myword,我们将它们放在non-capturing group内,仅用于分组目的。

^\s*((?:\d+|myword)(\s*,\s*(?:\d+|myword))*)?\s*$

请参阅regex demo

要对MyWoRd不区分大小写,请在编译RegexOptions.IgnoreCase对象时使用Regex标记,或在整个模式前添加(?i) 内联修饰符 (即(?i)^\s*((?:\d+|myword)(\s*,\s*(?:\d+|myword))*)?\s*$)。

以下是C# demo

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        var inputs = new string[] { "1, 2, 3", "1, myword, 3", "1, MyWord, 3" };
        var pat = @"^\s*((?:\d+|myword)(\s*,\s*(?:\d+|myword))*)?\s*$";
        foreach (var s in inputs)
            Console.WriteLine("{0} matched: {1}", s, Regex.IsMatch(s, pat, RegexOptions.IgnoreCase));
    }

}