C# 如何获得所有字符串“可能性”

C# 如何获得所有字符串“可能性”,c#,arrays,.net,regex,string,C#,Arrays,.net,Regex,String,给定一个类似字符串s=abcdef的字符串, 获取包含以下所有字符串的列表/数组的最佳方法是什么: "acd", "abcd", "acdef", "abcdef" 其他信息: 结果的顺序无关紧要。 括号的数量未知 我曾尝试用正则表达式来实现这一点,但没有走多远。有很多方法可以实现这一点,但是下面是一个使用掩码数组跟踪置换状态、一些正则表达式和一些辅助方法的示例 给定 输出 Michael Randall的回答是正

给定一个类似字符串s=abcdef的字符串, 获取包含以下所有字符串的列表/数组的最佳方法是什么:

"acd",
"abcd",
"acdef",
"abcdef"
其他信息: 结果的顺序无关紧要。 括号的数量未知


我曾尝试用正则表达式来实现这一点,但没有走多远。

有很多方法可以实现这一点,但是下面是一个使用掩码数组跟踪置换状态、一些正则表达式和一些辅助方法的示例

给定

输出


Michael Randall的回答是正确的,但经过进一步思考,我终于能够想出一个可能不是很好的工作解决方案

string s = "a(b)cd(ef)";
List<string> result = new List<string>();
int amount = s.Split('(').Length;
amount = (int)Math.Pow(2, amount - 1);

for (int i = 0; i < amount; i++)
{
    string temp = string.Copy(s);
    string binaryString = Convert.ToString(i, 2).PadLeft(amount, '0');
    string tempResult = "";

    for (int j = 0; j < binaryString.Length && !temp.Equals(""); j++)
    {
        Regex regex = new Regex(@"[^(]*");

        tempResult += regex.Match(temp).Value;

        if (binaryString[binaryString.Length - 1 - j].Equals('1'))
        {
            string regexStr = @"\(([^)]*)\)";
            regex = new Regex(regexStr);
            tempResult += regex.Match(temp).Value;
        }
        if (temp.Contains(')'))
            temp = temp.Substring(temp.IndexOf(')') + 1);
        else temp = "";
    }
    result.Add(tempResult.Replace("(", "").Replace(")", ""));
}

这实际上是一个相当简单和有趣的问题。然而,您的问题很可能被错误地关闭,因为它没有显示任何代码或您被卡住的地方。你尝试过什么吗?有些事情可能会帮助你开始,虽然答案可能不考虑可选的部分。这能回答你的问题吗?我同意反对票,可能已经有重复票了。但投票以过于宽泛的方式收市肯定是错误的@MichaelRandall,是的,但由于有人尝试过,但没有表现出来,这是有可能发生的。也许你是对的
string s = "a(b)cd(ef)";

foreach (var result in Results(s))
   Console.WriteLine(result);
acd
abcd
acdef
abcdef
string s = "a(b)cd(ef)";
List<string> result = new List<string>();
int amount = s.Split('(').Length;
amount = (int)Math.Pow(2, amount - 1);

for (int i = 0; i < amount; i++)
{
    string temp = string.Copy(s);
    string binaryString = Convert.ToString(i, 2).PadLeft(amount, '0');
    string tempResult = "";

    for (int j = 0; j < binaryString.Length && !temp.Equals(""); j++)
    {
        Regex regex = new Regex(@"[^(]*");

        tempResult += regex.Match(temp).Value;

        if (binaryString[binaryString.Length - 1 - j].Equals('1'))
        {
            string regexStr = @"\(([^)]*)\)";
            regex = new Regex(regexStr);
            tempResult += regex.Match(temp).Value;
        }
        if (temp.Contains(')'))
            temp = temp.Substring(temp.IndexOf(')') + 1);
        else temp = "";
    }
    result.Add(tempResult.Replace("(", "").Replace(")", ""));
}