【问题标题】:Finding a pattern in a set of values in Java在 Java 中的一组值中查找模式
【发布时间】:2016-11-23 17:22:10
【问题描述】:

有没有办法在 Java 中提取字符串列表中的通用模式?

例如,如果我们有一个值列表:

001-L1
002-L2
003-L3
004-L4
...

有没有办法推断出我们有 3 位数字,后跟“-”,然后是字母 L,最后是数字字符?

我认为这与常见的子字符串或类似的东西有关,但我还没有找到任何东西。

谢谢!

编辑:显然这不会是一个完美的识别,它只会根据数据返回一个推荐。

我正在尝试构建的东西接近this。在视频中,当用户点击该列时,建议将数据拆分为“:”。

【问题讨论】:

  • 模式可以是任何东西????
  • 你需要提取数字还是什么?
  • “推断”?你的意思是像人工智能?
  • 你想从一组输入中找出正则表达式吗?
  • 您可以查看第一个,对其进行分类并检查其他是否符合此分类。这只有在第一项与其他项不完全不同时才有效。

标签: java pattern-matching delimiter


【解决方案1】:

我认为您可能想“推断”一组字符串可能共有的模式,而不是使用正则表达式验证它们。这个问题可能属于模式识别。

  • 您可以首先对任意两个字符串应用Longest Common Substring(不是最长公共子序列)算法。请注意,根据您的字符串列表,您可能会得到两个最长的公共子字符串00-L,因此您需要注意它。
  • 然后,当您得到一个公共子字符串作为结果时,只需使用contains() 方法检查其他字符串中的模式。

只有当字符串之间的共同模式至少是几个字符时,这种方法才有效。

编辑:

如果你想在给定的视频中实现类似的东西,你只需要根据特定的分隔符分割字符串。一种简单而幼稚的方法:

  • 创建一个可能的分隔符列表,例如:,.,-,,,:: 等。
  • 搜索所有您的字符串以查找特定分隔符的出现。 LCS 算法不起作用,因为字符串可能具有不用作分隔符的常见数据值(如视频中的“是”和“否”)。
  • split 基于分隔符的字符串,如果在所有(甚至大部分)字符串中都找到它!

可能有比这个更优化的解决方案!

【讨论】:

  • 是的,这是解决问题的一种方法。这正是我正在寻找的模式识别,但我找不到任何可以帮助我的东西。如果字符串至少包含几个字符,为什么该方法效果最好?对于上面的例子,我们不能得到所有字符串的 -L 吗(假设所有的值都是这样构造的)?
  • 如果你的字符串集只有一个字符,比如-作为常见的模式,LCS算法可能很难找到它,因为00会首先被检测到。 -L 可以正常工作,但您可能必须向算法输入两个字符串,例如 012-L4001-L5,以便只有一个最长的公共子字符串 (-L)。跨度>
  • 检查我在原始帖子中的编辑,它可能会显示我正在尝试做的事情。是的,当然数据不限于上面的 4 个值,列表相当长,然后我们可以找到 -L 模式。
猜你喜欢
  • 2020-11-26
  • 2017-04-15
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
相关资源
最近更新 更多