首页 > 解决方案 > 我怎样才能做出忽略子集的展望?

问题描述

我正在尝试将字符串中的一些时尚尺寸隔离为两个单独的数据点。

IE。如果我得到 XXS/XS,我想隔离“XXS”,然后用第二个正则表达式得到“XS”。

为此,我刚刚使用了第 1 组

([A-Za-z0-9]+)

对于第一个尺寸和

(?:[^A-Za-z0-9()]+([A-Za-z0-9]+))

抓住第二个尺寸

但是,我遇到了一些新的奇怪组合,它们是一个值:

S1 - XXS/XS-S/M

在这种情况下,我将如何确保我的正则表达式将XXS/XS作为第一个值,将S/M作为第二个值,同时还确保我也将XXS作为第一个值,将XS作为第二个值(如果字符串)只是“XXS/XS”或 40 和 42 与“40-42”?

根本想不出最好的方法来做到这一点——希望一些聪明的人知道这样做的好方法!我可以系统明智地“仅”支持一个正则表达式来获取第一个值和第二个正则表达式来获取第二个值。我的系统只捕获第 1 组。

我的代码是基于 python 的,所以通常使用 pythex.org 来验证它是否可以在 python 中工作。

标签: pythonregex

解决方案


我认为你可以使用

(?i)([a-z\d]+(?:[/-][a-z\d]+)?)[/-]([a-z\d]+(?:[/-][a-z\d]+)?)

请参阅正则表达式演示

请注意,上面的正则表达式包含两个包含必要值的捕获组。

如果您需要始终获取 Group 1 ,那么您只需从上面的正则表达式中删除不必要的括号对并只保留一个捕获组。

细节

  • (?i)- 不区分大小写的内联修饰符选项
  • ([a-z\d]+(?:[/-][a-z\d]+)?)- 一个或多个字母数字字符,然后可选出现/-后跟一个或多个字母数字字符
  • [/-]- 一个/-
  • ([a-z\d]+(?:[/-][a-z\d]+)?)- 第 2 组:(与第 1 组模式相同)。

推荐阅读