将两个字符串作为参数(s1, s2)
我应该能够设置new Regex(my_regular_expression(s1, s2))
。例如s1 =“abcd”,s2 =“xyz”我想匹配字符串:
regex.IsMatched(x)== true,其中x是以下之一:
abcd.xyz
abcd-xyz
xyzabcd
dxy
yzab
z a
dx
cd
but not limited to
但是regex.IsMatched(y)==false
,其中y是以下之一:
aabcd.xyzv
abd.xyz
xycd
but not limited to
在s1和s2之间可能没有任何字符。 s1的任何右子串(参见函数string.right(string str,int length)
)与s2的左子串(参见函数string.left(string str,int length)
)连接,或者s2的任何右子串与s1的左子串连接。
请在正则表达式中使用s1和s2而不是abcd,xyz。 s1 / s2可以包含特殊字符。
提前谢谢。
答案 0 :(得分:1)
我相信Combined
会给你你想要的表达。它有以下限制。
.
或-
),即使它是一封信。SuffixPart
不支持不适合单个UTF-16代码点的Unicode字符。如果您需要处理此边缘情况here is a related question that talks about Java code。PrefixPart
也不支持不是单个UTF-16代码点的Unicode字符,但该方法不会“严重”破坏。以下是代码:
public static string PrefixPart(string str)
{
return
string.Join("(?:", str.Select(i => Regex.Escape(i.ToString())))
+ string.Join(")?", Enumerable.Repeat(string.Empty, str.Length));
}
public static string SuffixPart(string str)
{
return PrefixPart(new string(str.Reverse().ToArray()));
}
public static string Combined(string str1, string str2)
{
string left = SuffixPart(str1) + ".?" + PrefixPart(str2);
string right = SuffixPart(str2) + ".?" + PrefixPart(str1);
return string.Format("^{0}|{1}$", left, right);
}
答案 1 :(得分:0)
我会做的
"/" + s1 + ".?" + s2 + "|" + s2 + ".?" + s1 + "/"
这将评估为(在您的示例中):
/abcd.?xyz|xyz.?abcd/
这两种模式都是以零或任何一个字符分隔的任何顺序。