【问题标题】:Check if two Strings contain the same pattern检查两个字符串是否包含相同的模式
【发布时间】:2012-11-16 10:19:24
【问题描述】:

我的应用程序需要在输入的字符串和存储在我的数据库中的字符串之间使用字符串匹配函数。这些字符串涉及产品尺寸(如长度、高度等)。我的目标是检查输入的字符串是否已存在于我的数据库中,但可能具有其他模式,例如:

输入:如果我的数据库中有“vis 4X40”或“vis 4 x 40”或“vis 4*40”之类的内容,“vis 4*40”应该返回 true。

我发现的唯一方法是使用正则表达式来规范化我的数据库以替换模式,例如:

 \d+ *[xX*] *\d+

使用标准化的(例如 NumberXNumber),对输入中的字符串执行相同操作,然后尝试找到它。但是我想知道是否有任何工具已经存在并且允许我这样做。 (我正在使用 C# .NET V4)

【问题讨论】:

  • 如果我的问题正确..你可以用上面的regex..如果两者都测试 input 字符串和 stored 字符串其中匹配则它已经存在
  • 我应该更详细一点,但在这种情况下,如果两者匹配正则表达式,这不应该匹配 "vis 4x40" 和 "vis 4x60" 事件
  • 查看我的答案,了解我真正的意思
  • 是否可以“修复”您的数据库?将此数据分成不同的列?
  • @hometoast 在技术上是可能的,为什么?

标签: c# regex string-matching


【解决方案1】:

只需使用用户提供的通配符,将* 替换为% 并查询您的表:SELECT col FROM table WHERE col LIKE 'vis 4%40'

请确保您使用参数执行查询。

【讨论】:

  • 这不匹配例如vis 40*40 和vis 4*40?
  • 你是对的。我的真正答案是:修复数据库。
【解决方案2】:

更好的方法是连接两个数据,然后匹配它们

string target=inputString+"#"+storedString;

if(Regex.IsMatch(target,"(\d+) *[xX*] *(\d+)#\1 *([xX*]) *\2"))
        //the string is in the database
else
       //it is not

【讨论】:

  • 我不同意这样更好。如果任何字符串包含分隔符- 怎么办?或者如果他们会,有时在未来呢?这可能是一个令人讨厌的错误。
  • @DavidPärsson 当然..但这不是仅使用正则表达式的情况..即使您以另一种方式执行此操作,也会发生变化
  • 大卫提出了一个很好的观点,我知道正则表达式是一个很难使用的工具,我将尝试你的解决方案,它应该暂时取代我的方法,如果报告任何大问题,我会让你知道并回到我的第一个想法。无论如何感谢您的回答:D
  • @Some1.Kill.The.DJ:分隔符只有在您连接字符串时才会出现问题。您可以根据找到的组创建类似的匹配功能,而无需连接字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多