需要正则表达式才能仅用字母或数字替换所有符号

时间:2012-10-15 09:48:27

标签: c# regex

我需要一个正则表达式来仅用字母或数字替换所有符号。有了空格,我将使用C#来运行表达式,我可以将部分卡在正则表达式部分上。

所以在更换之后

  1. Type-01 将是 Type 01
  2. 01 )*仍然是 01 )*
  3. - 类别:玩具仍然是 -Category:Toys
  4. 白色:返回将是白色黑色
  5. 当前表达

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

    输入字符串是

      

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

    必需的输出

      

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

    但我得到的是

      

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

    不确定我是否只是遗漏了一些简单的东西或只是错误的结束了

2 个答案:

答案 0 :(得分:2)

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

我不确定这对你是否足够,但对于你的例子,这将有效:

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

并替换为单个空格。

我会使它更具Unicode风格:

(?<=\w)[^\p{L}0-9*:()\s]+(?=\w)

其中\p{L}是任何语言的字母的Unicode属性。

here on Regexr

<强>更新

如果您想要保留冒号,如果有“类别”之前可以这样做

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

请参阅it on Regexr

我将冒号添加到否定的字符类中,表示不要替换冒号。然后我添加了一个替代方案:替换冒号,但前面只有没有“类别”。

答案 1 :(得分: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]", " ");