0

请帮助我开发一个正则表达式,如果它以(&任何字符)结尾,它将返回字符串中的所有匹配项。String a="abcd(&w)",那么matches应该有值(&w) 如果a="abcd(&w),xhz(&d),那么应该有两个matches 注意:代替上面的逗号(,)可以可以是任何分隔符列表 [','':',';'......]

如果 abcd(&w)pqrsr, xhz(&d)。那么匹配应该只有 (&d) 而不是 (&w) 因为它不是在分隔符之前结束

4

2 回答 2

2

像这样的东西应该工作:

\(&.\)(?=[,:;]|$)

这将匹配一个文字(&,后跟任何字符,然后是文字)。它还要求下一个字符是 、 或 之一,:或者;匹配后跟在字符串的末尾。

于 2013-08-23T19:32:57.223 回答
0

只需构建正则表达式。例如,abcd(&w)将是.*[w]$,这是一个正则表达式 101来证明它。如果你需要多个字符,像这样abcd(&w), xhz(&d),那么正则表达式就是.*[wd]$.

但是,您将不得不解析那些作为输入获得的字符串来构建正则表达式。例如,您可能会执行以下操作:

var regex = "abcd(&w)".Replace("(&", "[").Replace(")", "]");

或者对于两个你可能会做这样的事情:

var input = "abcd(&w), xhz(&d)";
var exps = input.Split(',', StringSplitOptions.RemoveEmptyEntries);
var startChars = new List<string>();
var endChars = new List<string>();

foreach (var ex in exps)
{
    if (ex.Substring(ex.Length - 3, 1) == "&")
    {
        startChars.Add(ex.Substring(0, ex.IndexOf("(")));
        endChars.Add(ex.Substring(ex.IndexOf("&") + 1, 1));
    }
}

var regex = string.Format("{0}[{1}]$",
    string.Join("|", startChars.ToArray()),
    string.Join("", endChars.ToArray()));

那将建立一个像这样的正则表达式abcd|xhz[wd]$

于 2013-08-23T19:34:31.660 回答