我需要一个正则表达式来替换所有仅由字母或数字包围的符号。有了一个空格,我将使用C#来运行表达式,我可以处理只停留在regex部分上的部分。
因此,更换后的
- 类型-01将为01类型
- 01)*仍然是01*)*
- -类别:玩具仍然是-类别:玩具
- 白色:背面将为白色-黑色
当前表达式
(?<=w)[^a-zA-Z0-9Category:]+(?=w)
输入字符串为
-类别:玩具和(泰迪熊类型01*)或(泰迪熊白色:黑色)
所需输出
-类别:玩具和(泰迪熊类型01*)或(泰迪熊白色-黑色)
但我得到的是
-类别:玩具和泰迪熊类型01或泰迪熊白色:黑色)
不确定我是只是错过了一些简单的东西,还是只是得到了错误的
不能将单词放入字符类中。那里的所有字符都将添加到该类中,顺序无关紧要。
我不确定这对你来说是否足够,但以你为例,这将起作用:
(?<=w)[^a-zA-Z0-9*:()s]+(?=w)
并替换为单个空间。
我会让它更像Unicode风格:
(?<=w)[^p{L}0-9*:()s]+(?=w)
其中,p{L}
是任何语言中字母的Unicode属性。
在Regexr 上查看
更新:
如果你想保留冒号,如果有"类别",然后你可以这样做
(?<=w)(?:[^a-zA-Z0-9*()s:]+|(?<!Category):)(?=w)
在Regexr 上查看
我在否定字符类中添加了冒号,表示不要替换冒号。然后我添加了一个替代方案:替换冒号,但前提是之前没有"类别"。
对于C#,您可以使用Regex.Replace函数。
string a = "Category:Toys AND (Teddy Bear Type-01*) OR (Teddy Bear White/Black)";
string s = string.Empty;
s = Regex.Replace(a, @"[^()*:A-Za-z0-9]", " ");