要求:
- 移除任何前导或尾随管道
- “修剪”内部术语周围的空白
- 删除“一次多个管道”
这些是一些示例输入->输出:
"|||car | boat|||" -> "car|boat"
"george bush|micheal jordon|bill gates|steve jobs"
-> "george bush|micheal jordon|bill gates|steve jobs"
" george bush|micheal jordon |bill gates |steve jobs "
-> "george bush|micheal jordon|bill gates|steve jobs"
"123|||123" -> "123|123"
你的例子几乎对你有用:
("^\|*(.*?)\|*$")
在我们继续之前,最好提一下这个 MSDN 参考页面:http: //msdn.microsoft.com/en-us/library/az24scfc.aspx
而这个在线测试页面:http ://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
我的 regex-fu 不够强大,因为我认为这个 regex 可能会起作用,但它看起来是一项艰巨的工作。我记录了内联,但它仍然很复杂(而且它完全不起作用)
^(?:\|*)((?:\s*)([a-zA-Z0-9]?[a-zA-Z0-9 ]*[a-zA-Z0-9]?)(?:\s*)\|?(?:\|*))(?:\|*)$
^ - start the line/input
(?:\|*) - capture any pipes at the beginning but ignore them
( - begin matching so we can get the values out the other side
(?:\s*) - trim leading spaces
[a-zA-Z0-9]?[a-zA-Z0-9 ]*[a-zA-Z0-9]? - match any alphanumerics with spaces in between
(?:\s*) - trim trailing spaces
\| - match any one pipe
(?:\|*) - ignore any remaining pipes in a row
)* - end matching, we should be done
(?:\|*) - capture any pipes at the end but ignore them
$ - end of the line/input
那么,让我们尝试解决问题,好吗?
您应该拆分管道,向前看,看看下一个是否为空长度字符串,如果不是,则将其添加到现有的单词长度中。让我们试试:
(这部分我将使用 DotNetPad)http://dotnetpad.net/ViewPaste/4bpRXD-vZEOwqTLDQbEECg
这是一个示例应用程序,可以满足您的需要,并且无需大惊小怪:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class DotNetPad {
public static void Main(string[] args) {
string[] tests = new[] {
"|||car | boat|||",
"george bush|micheal jordon|bill gates|steve jobs",
" george bush|micheal jordon |bill gates |steve jobs ",
"123|||123"
};
foreach(var s in tests)
Console.WriteLine(CleanString(s));
}
public static string CleanString(string input) {
string result = string.Empty;
string[] split = input.Split(new[] {
'|'
});
foreach(var s in split) {
if (!string.IsNullOrEmpty(s)) {
result += "|" + s.Trim();
}
}
return result.Substring(1);
}
}
我在第二个代码上花了最多 10 分钟,以及自从我编辑帖子试图让正则表达式工作以来的所有内容。故事的寓意:只做你必须做的工作,你不必对所有事情都使用正则表达式。