Skip to main content
 首页 » 编程设计

c#之除去除数字外的所有内容的正则表达式是什么

2024年01月21日28dyllove98

我有这种格式的数据

"NEW ITEM:1_BELT:3_JEANS:1_BELT:1_SUIT 3 PCS:1_SHOES:1" 


格式为 Item1:Item1Qty_Item2:Item2Qty.........ItemN:ItemNQty

我需要分开项目及其相应的数量和表格数组。我做了这样的项目部分。

var allItemsAry = Regex.Replace(myString, "[\\:]+\\d", "").Split('_'); 


现在 allItemsAry是正确的 [NEW ITEM, BELT, JEANS, BELT, SUIT 3 PCS, SHOES]

但是我无法弄清楚如何获取数量,无论我尝试从 3中获取 SUIT 3 PCS的哪种表达方式,诸如此类

var allQtyAry = Regex.Replace(dataForPackageConsume, "[^(\\:+\\d)]", "").split(':')  


它以 :1:3:1:13:1:1出现(替换时)。因此,我不能用 :分隔以使其成为数组,可以看出第四项是 13,而应该是 1,即 3来自 SUIT 3 PCS。我还尝试了其他一些变体,但是 3中的 SUIT 3 PCS总是弹出。我如何获取衣服的数量(可能与 :相连,所以我可以以此拆分衣服并形成阵列?

更新:如果我在想得到 :和分号之前的数字之前没有弄清楚的话。

所以,我想要的是:1:3:1:1:1:1。

请您参考如下方法:

这将与一个替换工作:

var allQtyAry = Regex.Replace(dataForPackageConsume, @"[^_:]+:", "").split('_') 


说明:

[^_:]表示匹配非 _或 :的任何内容

[^_:]+:表示匹配至少一个不与 _或 :匹配但以 :结尾的字符的任何序列

由于默认情况下正则表达式是贪婪的(即它们尽可能多地捕获),因此匹配将从字符串的开头或每个 _之后开始:

新商品:1_皮带:3_牛仔裤:1_皮带:1_SUIT 3件:1_鞋子:1

删除匹配的部分(上面的斜体粗体字)会导致:

1_3_1_1_1_1

按 _拆分将导致:

[1, 3, 1, 1, 1, 1]