请帮助我开发一个正则表达式,如果它以(&任何字符)结尾,它将返回字符串中的所有匹配项。String a="abcd(&w)",那么matches应该有值(&w) 如果a="abcd(&w),xhz(&d),那么应该有两个matches 注意:代替上面的逗号(,)可以可以是任何分隔符列表 [','':',';'......]
如果 abcd(&w)pqrsr, xhz(&d)。那么匹配应该只有 (&d) 而不是 (&w) 因为它不是在分隔符之前结束
请帮助我开发一个正则表达式,如果它以(&任何字符)结尾,它将返回字符串中的所有匹配项。String a="abcd(&w)",那么matches应该有值(&w) 如果a="abcd(&w),xhz(&d),那么应该有两个matches 注意:代替上面的逗号(,)可以可以是任何分隔符列表 [','':',';'......]
如果 abcd(&w)pqrsr, xhz(&d)。那么匹配应该只有 (&d) 而不是 (&w) 因为它不是在分隔符之前结束
像这样的东西应该工作:
\(&.\)(?=[,:;]|$)
这将匹配一个文字(&
,后跟任何字符,然后是文字)
。它还要求下一个字符是 、 或 之一,
,:
或者;
匹配后跟在字符串的末尾。
只需构建正则表达式。例如,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]$
。