gpt4 book ai didi

c# - 查找忽略指定字符的子字符串

转载 作者:太空狗 更新时间:2023-10-29 21:52:19 25 4
gpt4 key购买 nike

你们有没有人知道一种简单/干净的方法来在字符串中查找子字符串,同时忽略某些指定的字符来查找它。我认为一个例子可以更好地解释事情:

  • 字符串:“你好,-这是一个字符串”
  • 要查找的子字符串: "Hello this"
  • 要忽略的字符:“,”和“-”
  • 找到子串,结果: "Hello, -this"

使用 Regex 对我来说不是必需的,但我添加了标签,因为它感觉相关。

更新:

为了使要求更清楚:我需要结果子字符串被忽略的字符,而不仅仅是给定子字符串存在的指示。

更新 2:你们中的一些人对这个例子读得太多了,抱歉,我会给出另一个应该有效的场景:

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

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

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

抱歉,如果我之前不清楚,或者我仍然不清楚 :)。

更新 3:

感谢所有提供帮助的人!这是我目前正在使用的实现:

这里有一些测试:

我正在使用一些我没有包括的自定义扩展方法,但我相信它们应该是不言自明的(如果你愿意,我会添加它们)我已经采纳了很多关于实现和测试的想法,但我将答案交给@PierrOz,因为他是第一个,并为我指明了正确的方向。请随时提供建议作为替代解决方案或对 impl 的当前状态发表评论。如果你愿意。

最佳答案

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

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;

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

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

更一般地说,它会给出类似的东西:

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;
}

关于c# - 查找忽略指定字符的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2592613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com