如何匹配子串字母数字和字符,而忽略超量,空格等

时间:2015-12-02 06:52:32

标签: regex entity-framework linq tsql

数据库中的数据:各种用户将数据放入我的应用程序(作为来自不同区域的字符串),此数据存储在[SerialID#] DB column中。内容适用于例如条形码,序列号等。

编辑:数据搜索,稍后另一位用户返回并搜索相同的产品,但输入他的搜索子/字符串和/或字符。

在针对user entered string进行搜索[SerialID#] DB column时,我需要匹配字母数字内容。 (通过在两者 DB / target和用户字符串/源代码中删除其他字符)。

我必须这样做,因为一些供应商A的序列与供应商B的序列不同,我无法控制用户如何将数据放入我的应用程序。

我在SQL服务器和.NET服务器端只搜索字符串中的以下两种情况时需要帮助。

例如 B ABCLKSAL1930239923-938 2998/84 ==匹配ABClksAL1930239923938299884

给定源字符串和目标字符串,如带有破折号/连字符的条形码/序列号;

  1. 如何单独匹配内容,忽略超量,斜线,空格- / \
  2. 我如何才能匹配数字? (即仅限数字)
  3. 如何匹配3个字符后的内容 BMS8937-932093 == 8937932093
  4. 如果这可以被参数化为可以重复使用的函数,那将是很好的, [通过,a)要忽略的第一个或最后一个字符的数量b)仅匹配数字而不仅仅是alphanumberic c)特定的截断的长度]
  5. 我试过这个[A-Za-z0-9],但无法弄清楚如何匹配每1,2和3的内容。

2 个答案:

答案 0 :(得分:0)

选中此问题stackoverflow.com/a/31693412/1080354,使用T-SQL.net中实施正则表达式支持。基本上,您可以在.net中创建此类函数,并在C#T-SQL代码中使用它。由于T-SQL中没有对正则表达式的内置支持,我相信这是要走的路。如果您有任何问题,请告诉我 我们的想法是在T-SQL语句中使用.net代码。在示例中,我正在创建regexreplace函数,但您可以查看链接以获取更多示例。您可以在.net上创建自己的函数,并将它们部署到SQL Server实例。 - gotqn

答案 1 :(得分:0)

我不认为可以选择更改您的应用以写入两个值(在两个单独的列中):输入的原始字符串,以及匹配1.上面的第二个字符串?
我建议在数据库中存储一个“剥离”形式的内容,作为预处理步骤(我想你可以用计算列做到这一点),然后在你的比较中使用保证的简化列。 - 克里斯托弗史蒂文森