1

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

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

谢谢

4

3 回答 3

3

正则表达式不是最简单的方法。相反,我推荐String.Split 方法,它通过定义单词之间的空白字符是什么来工作:

string fullname = "Bruce O'Brien";
string[] names;
Char[] separators = new Char [] {' '}; // only the space character, in this case

names = fullname.Split(separators);

一旦你有了一个名字数组,如果你需要的话,很容易把它变成一个 csv 字符串。

于 2013-08-15T16:36:53.363 回答
2

正如其他人所建议的那样,String.Split()这里可能更有意义。

但是,我认为你会有一场艰苦的战斗。我这样做是为了将现有数据库中的名字和姓氏分开,我发现人们输入名字的方式有很多不同。考虑中间名、前缀、后缀等。

我已经发布了我最终在将名称拆分为名字和姓氏一文中使用的代码。

您可能需要考虑使用类似的方法。

于 2013-08-15T16:49:52.897 回答
0

在尝试解决此问题后,我发现了一个有效的正则表达式。它可能对其他人有用

private Regex regex = new Regex("[^A-Za-z0-9\x27\x2D\x2E,\\s]");

在哪里

  • A-Za-z 均值 alpha
  • 0-9 数字
  • \x27 APOSTROPHE(如果这将在 DB 中运行的查询中添加第二个 ' 转义)
  • \x2D 连字符或减号
  • \x2E 句号或句号

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

谢谢你们的帮助。

于 2013-08-20T17:22:42.183 回答