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

标签 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

最佳答案

在模式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/

相关文章:

Java 8 正则表达式 : a capturing group in a pattern doesn't match, 但整个模式确实匹配

java - 有什么方法可以使用带有两对不同分隔符的正则表达式吗?

正则表达式:如何获取字符串中组的所有匹配项

python - 用于捕获两个子字符串之间的字符串的正则表达式

Java String.split() 正则表达式

c++ - 使用正则表达式从 C++ 中的一行文本中提取数据

android - 什么正则表达式可用于从 logcat 中过滤掉 dalvikvm 和 dalvikvm-heap 消息

regex - 正则表达式 - 检查字符串中是否存在可选的 '/'

javascript - 如何查找文本但将其从匹配正则表达式中排除?

Java 链接正则表达式