要求:
- 删除任何前导或尾随的管道符号
- 在内部术语周围“修整”空格
- 一次性删除“多个管道符号”
这些是一些样本输入->输出:
"|||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
我的正则表达式技能不够强,因为我认为这个正则表达式可能有效,但它看起来很困难。我内联记录了文档,但它仍然很复杂(而且完全不起作用)。
^(?:\|*)((?:\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分钟,自从我编辑帖子尝试让正则表达式起作用以来,一切都变得容易了。故事的寓意是:只做必要的工作,不必为所有事情都使用正则表达式。