正则表达式:将名字,名字分成逗号分隔列表,例如“john smith Jr.” “约翰”,“史密斯”,“小”

时间:2013-08-15 16:29:18

标签: c# regex

我正在使用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',它失败了(由于特殊字符)

我的正则表达式中缺少什么?

由于

3 个答案:

答案 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]");

,其中

  • A-Za-z意味着α
  • 0-9数字
  • \ x27 APOSTROPHE(p.s.如果这将在DB中运行的查询中添加第二个'以逃避)
  • \ x2D HYPHEN或MINUS
  • \ x2E FULL STOP或PERIOD

以下是完整选项列表: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'

谢谢你们的帮助。