正则表达式以获取字符串中的所有匹配结束

时间:2013-08-23 19:28:13

标签: regex

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

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

2 个答案:

答案 0 :(得分:2)

这样的事情应该有效:

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

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

答案 1 :(得分:0)

只需构建正则表达式。例如,abcd(&w).*[w]$,此处为Regex 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]$这样的正则表达式。