Fre*_*oux 6 .net c# regex substring
你们中的任何人都知道一种简单/干净的方法来查找字符串中的子字符串,同时忽略一些指定的字符来查找它.我想一个例子可以更好地解释事情:
使用正则表达式不是我的要求,但我添加了标签,因为它感觉相关.
更新:
为了使需求更加清晰:我需要使用忽略的字符生成子字符串,而不仅仅是指示给定的子字符串存在.
更新2: 你们中的一些人正在阅读过多的例子,对不起,我将给出另一个应该有效的方案:
并且作为奖励(本身不是必需的),如果假设要查找的子字符串没有被忽略的字符也是不安全的,例如:给出最后一个示例,我们应该能够做到:
对不起,如果我以前不清楚,或者我仍然不是:).
更新3:
感谢所有帮助过的人!这是我现在正在使用的实现:
这里有一些测试:
我正在使用一些我不包括的自定义扩展方法,但我相信它们应该是自我解释的(如果你愿意,我会添加它们)我已经为实现和测试采取了很多你的想法,但我是给@PierrOz的答案,因为他是第一,并指出了我正确的方向.随意提供建议作为替代解决方案或对当前状态的评论.如果你喜欢.
在你的例子中你会这样做:
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)
| 归档时间: |
|
| 查看次数: |
4018 次 |
| 最近记录: |