对于像“A.B.C.D. EFG”这样的输入文本,我想得到字母的排列,后跟要转换的点以在点后添加空格。因此,对于上面的例子,我想得到“A.B.C.D.”,“A。B.C.D.”,“A.B。C.D。”,“A.B.C。D.”,“A. B. C.D。”,“A.B。C. D.”,“A。B. C. D.”
这可以用正则表达式完成吗?如果是,那么任何与c#(.net)一起使用的正则表达式样本都将非常受欢迎。带点的字符数未知,可能因文本而异。
另一方面,如果文本是“A. B. C. D. EFG”或“A. B.C.D. EFG”等,我想得到所有的排列。
此致
答案 0 :(得分:1)
像
这样的东西static string[] GetPermutations(string input)
{
List<string> ret = new List<string>();
List<string> cleanInput = new List<string>();
foreach (string bit in input.Split('.'))
{
if (bit.Trim().Length > 0) cleanInput.Add(bit.Trim());
}
foreach (string bit in cleanInput)
{
if (ret.Count == 0)
{
ret.Add(bit);
continue;
}
List<string> oldRet = ret;
ret = new List<string>();
foreach (string oldBit in oldRet)
{
ret.Add(oldBit + bit);
ret.Add(oldBit + " " + bit);
}
}
return ret.ToArray();
}
然后,打电话给它: -
foreach (string p in GetPermutations("A.B. C.D."))
{
Console.WriteLine(p);
}
输出: -
ABCD
ABC D
AB CD
AB C D
A BCD
A BC D
A B CD
A B C D
您只需要添加点,并检查您可能需要的任何其他未指定的逻辑(例如,从示例输入中删除EFG。