我正在使用C#(asp .net),我有一个文本框,接受在数据库上执行查询的名称条目。
我想使用IN
子句获取所有可能的值,但在我的c#页面中我得到1个字符串
例如'john smith'所以我用正则表达式把它分解成'john','smith'
string text1 = "'"+Regex.Replace(text,@"[^A-Za-z0-9\-\.\']+","','")+"'";
然而对于像'John smith Jr.'这样的名字。或者'Bruce O'Brien',它失败了(由于特殊字符)
我的正则表达式中缺少什么?
由于
答案 0 :(得分:3)
正则表达式不是最简单的方法。相反,我推荐String.Split method,它通过定义单词之间的空白字符来起作用:
string fullname = "Bruce O'Brien";
string[] names;
Char[] separators = new Char [] {' '}; // only the space character, in this case
names = fullname.Split(separators);
一旦你获得了一系列名称,如果这就是你所需要的,很容易将其变成csv字符串。
答案 1 :(得分:2)
正如其他人所建议的,String.Split()
在这里可能更有意义。
但是,我认为你将面临一场艰苦的战斗。我这样做是为了在现有数据库中分解名字和姓氏,我发现人们如何输入他们的名字有很多变化。考虑中间名,前缀,后缀等。
我发布了我最终在文章Splitting a Name into First and Last Names中使用的代码。
您可能需要考虑使用类似的方法。
答案 2 :(得分:0)
在尝试解决此问题后,我发现了一个有效的正则表达式。它可能对其他人有用
private Regex regex = new Regex("[^A-Za-z0-9\x27\x2D\x2E,\\s]");
,其中
以下是完整选项列表:http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=string-literal&unicodeinhtml=hex
然后要制作列表,首先我检查regex.IsMatch(searchterm)
,然后制作:
text = " ' " + Regex.Replace(text," ","','") + " ' ";
这导致 John Smith Jr。给予'John','Smith','Jr。';或 Kevin O'Neil 给予'Kevin','O'Neil'。
谢谢你们的帮助。