尝试删除遵循该模式的字符串
标签开头
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
最佳答案
在模式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
关于regex - 正则表达式用于匹配大写字母和破折号,后跟逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56240680/