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

RegEx for matching uppercase and dash followed by a comma

正在尝试删除符合模式

的字符串

标签开头为

Size:  

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

示例:

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

要从我的单元格中删除所有尺码 'range' 标签,只保留单一尺码标签。

解决方案可以在这里找到:regex101.com/r/VuTzba/1

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

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

捕获组 () 收集我们所需数据的位置。

正则表达式

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

正则表达式电路

jex.im 也有助于形象化表达。

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

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

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

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

说明

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

Regex demo

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

编辑

也匹配 Size: 28W-30W-32W-34W-36W-38W-40W, Size: 28W-30W-32W-34W 或者您可以使用扩展字符 class 添加 |\d+W 并结束匹配逗号或断言字符串结尾的模式 $

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

Regex demo

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