获取带缩写空格的组合(字母后跟点)

时间:2011-02-17 04:13:02

标签: c# .net regex

对于像“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”等,我想得到所有的排列。

此致

1 个答案:

答案 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。