【问题标题】:Parsing a potential ProductId解析潜在的 ProductId
【发布时间】:2012-07-25 16:15:49
【问题描述】:

我需要能够确定表单上文本字段中的特定文本是否是 ProductId。

我想我可能(很遗憾)需要正则表达式。

无论如何,搜索查询中可能存在任意数量的事物,我需要确定该字段中的事物是否可能是 productid。

我们所有的产品 ID 都采用以下格式:

AA8678NY

ONO23476

OPI765.0987

而且似乎没有任何通用格式(数据库中有超过 400、000 个产品 ID)。

所以基本上,我想我想说的是,任何产品 id 都可以被认为是starting with either 1 or more numbers, or letters, followed by either 1 dot or 1 or more numbers or letters, and ending with either 1 or more letters or numbers. - 有时它只是一堆数字。

我们可以在没有正则表达式的情况下实现类似的东西吗?

感谢任何帮助。

【问题讨论】:

  • 除非您对这些产品 ID 有更多了解,否则您永远无法确定解析。根据目前的信息,3.023px 或任何与此相关的词都可以是产品 ID。
  • 是的,你是对的。产品 ID 的范围如此多样,以至于永远不会准确。但是解析每个搜索词以及其他措施也将有助于排除它是不是 - 这最终将导致明确的答案;要么是的,它是一个 Pid,要么不,它不是。
  • 根据产品id的定义,不能。曾经。 “我拥有一辆 1000cc 发动机和 25.3 BHP 的摩托车。”除了“必和必拓”。一切都可以是产品ID。

标签: c# .net regex parsing


【解决方案1】:

你可以,但你为什么要呢?
Regex 其实很简单:

[A-Z1-9]+|([A-Z1-9]+\.[A-Z1-9]+)

如果已知最小长度,请将+ 替换为{n,}

【讨论】:

  • 你不认为这些会解析更多的信息吗? OP 说搜索字符串中可以有任何内容。
  • @Danish - 你是对的,可以有任何东西。但是每个“搜索词”都由一个特殊字符分隔,所以当我解析事物时,我会遍历每个搜索词,就像它在字符串数组中一样
  • "1000cc" - 你怎么知道这是一个产品 ID 或只是立方容量?恕我直言,没有任何模式可以保证一定能找到。我可能在这里遗漏了一些东西,但到目前为止,这是我的立场。尽管 OP 似乎对您的模式很满意,但请点赞。 :)
  • @danish:我完全同意你的看法。但正如 OP 所述,这将不是应用于搜索词的唯一措施。也许结合其他措施,它会提供一个明确的答案。
【解决方案2】:

Regex 是一种非常简单的方法。我不知道你为什么这么不愿意使用它。这种模式应该适合你:

Regex productIDPattern = new Regex(@"[A-Z0-9]+\.*[A-Z0-9]+");

【讨论】:

  • 从我第一次开始编程时(2 或 3 年前?)就开始避免使用 Regex。这让我很害怕,我以为它会刺伤我。 - 任何人......这很好,谢谢@itsme86
猜你喜欢
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 2017-02-23
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多