【问题标题】:Extract block of consecutive alphanumeric characters from a line of text从一行文本中提取连续的字母数字字符块
【发布时间】:2017-07-25 17:09:48
【问题描述】:

假设我有一个产品列表,例如:

  • 品牌 HGT15K51B 商品,带有文字描述
  • 命名为 CDGL-56 的产品并带有描述
  • 带有 TR64GQE350 并添加了 Gizmo 的精美物品
  • 另一个品牌106110 110cm绿色带风扇

我正在尝试仅提取产品代码。

这将是一大块连续的文本。它可能包含带有 _ - 的 A-Z 1-9。它总是大写的。它总是以空格结尾。它的长度未知。它可能只是数字。它总是字符串中最大的连续块。

我的正则表达式技能很弱,可以用正则表达式提取吗?有没有更好的办法?

谢谢

【问题讨论】:

  • 如果他们总是遵循像这样的相同模式,即产品名称后跟 id 后跟描述,那么这是可能的。但是有太多可能导致误报的边缘情况,您可能不会得到任何覆盖 100% 的结果。
  • 唯一的区别是(?<!\S)[A-Z0-9-]+(?!\S)
  • 正则表达式不适合这个问题吗?
  • 你可以试试这个(?<!\S)[A-Z0-9-]+(?!\S)
  • + 替换为{5,} 意味着5 个或更多。您还可以找到字符串中的所有匹配项,然后只需 strlen 即可找到最长的匹配项。

标签: php regex string text-extraction


【解决方案1】:

你可以试试这个

(?&lt;!\S)[A-Z0-9-]{5,}(?!\S)

https://regex101.com/r/zHE8nc/2

 (?<! \S )        # Whitespace boundary
 [A-Z0-9-]{5,}    # Allowed characters, minimum 5
 (?! \S )         # Whitespace boundary

【讨论】:

  • 设置下限有用,已修改为使用{5,}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2021-12-31
  • 2012-02-01
  • 1970-01-01
  • 2022-08-04
  • 2017-07-30
  • 2016-04-20
相关资源
最近更新 更多