请帮我开发一个正则表达式,如果它以(& any character)结尾,它将返回字符串中的所有匹配项 例如。字符串a =“abcd(& w)”,则匹配应具有值(& w) 如果a =“abcd(& w),xhz(& d),那么应该有两个匹配 注意:代替上面的逗号(,),它可以是任何分隔符列表[','':',';'.........]
如果abcd(& w)pqrsr,xhz(& d)。那么匹配应该只是(& d)而不是(& w),因为它在分隔符之前不是最终的
答案 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]$
这样的正则表达式。