正则表达式用于匹配大写字母和破折号,后跟逗号

时间:2019-05-21 14:36:58

标签: regex regex-lookarounds regex-group regex-greedy

尝试删除遵循该模式的字符串

标签以

开头
Size:  

,并且在下一个COMMA(,)之前包含-字符。

示例:

Size: XS-S-M-L-XL-2XL,

Size: XS-S-M,

将被选中(包括,

但是Size_S,将被忽略,因为没有-

我与:

Size:(.*)-*(.?),

但仍不能停在,

这里是1行标签:

Athletics, Fitted, Mesh, Feature_Moisture Wicking, Material_Polyester 100%, , Material_Polyester 100%, Material_Polyester Over 50%,  School, Style_Short Sleeves, Size_2XL, Size_L, Size_M, Size_S, Size_XL, Size_XS, Size: XS-S-M-L-XL-2XL, Uniforms, Unisex, V-Neck, VisibleLogos, Youth

要从我的单元格中删除所有尺寸的“范围”标签,仅保留单个尺寸标签。

解决方案可在此处找到:regex101.com/r/VuTzba/1

3 个答案:

答案 0 :(得分:2)

在模式Size:(.*)-*(.?),中,您首先使用(.*)进行匹配,直到字符串结尾。

此后,连字符-*和组(.?)中的单个字符是可选的,因此它将回溯到最后一个逗号,因为这是唯一必须匹配的字符。

要获得更精确的匹配,可以使用重复模式来匹配尺寸:

Size: (?:\d*X[SL]|L|M|S)(?:-(?:\d*X[LS]|L|M|S))*,

说明

  • Size:匹配大小,后跟一个空格
  • (?:非捕获组
    • \d*X[SL]|L|M|S与轮换中列出的项目之一匹配
  • )关闭群组
  • (?:非捕获组
    • -(?:\d*X[LS]|L|M|S)匹配连字符,后跟任何列出的项目
  • )*,关闭组并重复0次以上并匹配逗号

Regex demo

更广泛的模式可能是使用字符类并列出所有允许的字符Size: [XSML\d]+(?:-[XSML\d]+)*,或匹配直到第一个逗号Size:[^,]+,

修改

要同时匹配Size: 28W-30W-32W-34W-36W-38W-40W, Size: 28W-30W-32W-34W,或者可以使用扩展字符类,向其添加|\d+W,并结束与逗号匹配的模式或断言字符串$

Size: (?:\d*X[SL]|L|M|S|\d+W)(?:-(?:\d*X[LS]|L|M|S|\d+W))*(?:,|$)

Regex demo

答案 1 :(得分:0)

我们可能想在此处的表达式中添加更多边界。让我们从类似以下内容开始:

Size:\s+([A-Z0-9-]+),

捕获组()收集我们想要的数据的地方。

enter image description here

RegEx

如果不需要此表达式,可以在regex101.com中对其进行修改或更改。

RegEx电路

jex.im还有助于可视化表达式。

enter image description here

答案 2 :(得分:0)

Size:\s*(.*?),将在冒号之后和下一个逗号之前跳过前导空白的所有内容。