4

我需要一个正则表达式来替换所有由字母或数字包围的符号。有一个空格,我将使用 C# 来运行表达式,我对刚刚卡在正则表达式部分的部分没有意见。

所以更换后如下

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

当前表达式

(?<=\w)[^a-zA-Z0-9Category:]+(?=\w)

输入字符串是

-类别:玩具和(泰迪熊 Type-01*)或(泰迪熊白色:黑色)

所需输出

-类别:玩具和(泰迪熊类型 01*)或(泰迪熊白色黑色)

但我得到的是

-类别:玩具和泰迪熊类型 01 或泰迪熊白色:黑色)

不知道我只是错过了一些简单的事情还是只是弄错了

4

2 回答 2

2

您不能将单词放入字符类中。那里的所有字符都将添加到该类中,顺序无关紧要。

我不确定这对您是否足够,但对于您的示例,这将起作用:

(?<=\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 上查看

我将冒号添加到否定字符类中表示不要替换冒号。然后我添加了另一种说法:替换冒号,但前提是之前没有“类别”。

于 2012-10-15T09:56:36.723 回答
0

对于 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]", " ");
于 2012-10-15T09:55:24.557 回答