查找忽略指定字符的子字符串

Fre*_*oux 6 .net c# regex substring

你们中的任何人都知道一种简单/干净的方法来查找字符串中的子字符串,同时忽略一些指定的字符来查找它.我想一个例子可以更好地解释事情:

  • string: "你好,-this-是一个字符串"
  • substring找到: "你好这个"
  • chars忽略: ","和" - "
  • 找到子串,结果: "你好, - 这个"

使用正则表达式不是我的要求,但我添加了标签,因为它感觉相关.

更新:

为了使需求更加清晰:我需要使用忽略的字符生成子字符串,而不仅仅是指示给定的子字符串存在.

更新2: 你们中的一些人正在阅读过多的例子,对不起,我将给出另一个应该有效的方案:

  • 字符串: "?A&3/3/C)412&"
  • 子串找: "A41"
  • 要忽略的字符: "&","/","3","C",")"
  • 找到子串,结果: "A&3/3/C)41"

并且作为奖励(本身不是必需的),如果假设要查找子字符串没有被忽略的字符也是不安全的,例如:给出最后一个示例,我们应该能够做到:

  • 子串找: "A3C412&"
  • 要忽略的字符: "&","/","3","C",")"
  • 找到子串,结果: "A&3/3/C)412&"

对不起,如果我以前不清楚,或者我仍然不是:).

更新3:

感谢所有帮助过的人!这是我现在正在使用的实现:

这里有一些测试:

我正在使用一些我不包括的自定义扩展方法,但我相信它们应该是自我解释的(如果你愿意,我会添加它们)我已经为实现和测试采取了很多你的想法,但我是给@PierrOz的答案,因为他是第一,并指出了我正确的方向.随意提供建议作为替代解决方案或对当前状态的评论.如果你喜欢.

Pie*_*rOz 1

在你的例子中你会这样做:

string input = "Hello, -this-, is a string";
string ignore = "[-,]*";
Regex r = new Regex(string.Format("H{0}e{0}l{0}l{0}o{0} {0}t{0}h{0}i{0}s{0}", ignore));
Match m = r.Match(input);
return m.Success ? m.Value : string.Empty;
Run Code Online (Sandbox Code Playgroud)

您将动态地构建包含所有要忽略的字符的 [-, ] 部分,并将该部分插入到查询的所有字符之间。

注意类[]中的'-':放在开头还是结尾

更一般地说,它会给出类似的内容:

public string Test(string query, string input, char[] ignorelist)
{
    string ignorePattern = "[";
    for (int i=0; i<ignoreList.Length; i++)
    {
        if (ignoreList[i] == '-')
        {
            ignorePattern.Insert(1, "-");
        }
        else
        {
            ignorePattern += ignoreList[i];
        }
    }

    ignorePattern += "]*";

    for (int i = 0; i < query.Length; i++)
    {
        pattern += query[0] + ignorepattern;
    }

    Regex r = new Regex(pattern);
    Match m = r.Match(input);
    return m.IsSuccess ? m.Value : string.Empty;
}
Run Code Online (Sandbox Code Playgroud)