需要正则表达式来替换所有仅由字母或数字包围的符号



我需要一个正则表达式来替换所有仅由字母或数字包围的符号。有了一个空格,我将使用C#来运行表达式,我可以处理只停留在regex部分上的部分。

因此,更换后的

  1. 类型-01将为01类型
  2. 01)*仍然是01*)*
  3. -类别:玩具仍然是-类别:玩具
  4. 白色:背面将为白色-黑色

当前表达式

(?<=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]", " ");

最新更新