0

我正在寻找一些帮助来验证这个字符串是否有效。我需要一个正则表达式模式来捕获括号集中的任何字母。我还需要确保括号末尾有一个分号。有任何想法吗?我的正则表达式绝对糟糕......

这是我想要匹配的:

Total Hours Worked (.5);
Total Hours Worked (.A);
Total Hours Worked (A);

第一个结果应该是假的,而最后两个应该是真的。

这是我尝试过的:

Match validateLettersAndSemiColon = Regex.Match(StringToMatch, "[a-z]);");
4

4 回答 4

2

这只是一个使用以下 3 个字符串作为输入的示例:

Total Hours Worked (.5);
Total Hours Worked (.A);
Total Hours Worked (A);

我没有考虑任何嵌套的内括号,只是括号内的可能组合是字母和点。

这是一个简单的例子:

string[] data = new string[] { "Total Hours Worked (.5);", "Total Hours Worked (.A);", "Total Hours Worked (A);" };
foreach (string input in data)
{
    Console.WriteLine("Result for:" + input);
    Match match = Regex.Match(input, @"\([a-z.]+\);$", RegexOptions.IgnoreCase);
    if (match.Success)
    {
        Console.WriteLine("YES");
    }
    else
    {
        Console.WriteLine("NO");
    }
}

@"\([a-z.]+\);$"括号前的\转义被捕获为普通括号,[a-z.]+我们想要匹配任意数量的字母和点的方法,也可以限制它,但应该给你一个想法。at the $end 意味着我们希望它以);

如果您想在第一个括号之后将其限制为单个点,您可以使用下面的正则表达式,它将在(

@"\(\.?[a-z]+\);$"

上述结果将是:

Total Hours Worked (.5);
NO
Total Hours Worked (.A);
YES
Total Hours Worked (A);
YES
于 2013-09-20T20:52:27.167 回答
1

您的正则表达式是/\([^)]+\);/或者/\(.+?\)/如果您没有嵌套括号。即使您在同一行中有两个或多个这样的括号组,它也可以工作。

如果您有嵌套括号,请使用/\(.+\);/,但如果您在同一行中有两个或多个括号组,这将不起作用。

最后,如果你有一个像这样的字符串:

 (aba(cc);a);eeee(dd(e););

对于单个正则表达式来说可能非常困难。

编辑 1

如果您要验证的括号组采用整个字符串,则可以使用 a^表示字符串的开头并使用 a$表示结尾。因此正则表达式变为

 /^\([^)]+\);$/
于 2013-09-20T20:46:04.320 回答
1

尝试以下正则表达式:

\([^0-9]+\)\s*;

这将匹配括号内除数字以外的任何字符。

我建议在大多数编程语言中放置\s*);出空间。

于 2013-09-20T20:59:32.393 回答
0

尝试这个;

        string[] inputstrings = new string[] { "Total Hours Worked (.5);", "Total Hours Worked (.A);", "Total Hours Worked (A);" };//Collection of inputs.
        Regex rgx = new Regex(@"\(\.?(?<StringValue>[a-zA-Z]*)\)\;{1}");//Regular expression to find all matches.
        foreach (string input in inputstrings)//Iterate through each string in collection.
        {
            Match match = rgx.Match(input);
            if (match.Success)//If a match is found.
            {
                string value = match.Groups[1].Value;//Capture first named group.
                Console.WriteLine(value);//Display captured substring.
            }
            else//If nothing is found.
            {
                Console.WriteLine("A match was not found.");
            }
        }

是 Ideone 示例。

于 2013-09-20T21:14:37.913 回答