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

标签 c# regex

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

所以替换后如下

  1. Type-01 将是 Type 01
  2. 01)* 仍然是 01)*
  3. -Category:Toys 仍然是 -Category:Toys
  4. White:Back 将是 White Black

当前表达式

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

输入字符串是

-Category:Toys AND (Teddy Bear Type-01*) OR (Teddy Bear White:Black)

要求的输出

-Category:Toys AND (Teddy Bear Type 01*) OR (Teddy Bear White Black)

但是我得到的是

-Category:Toys AND Teddy Bear Type 01 OR Teddy Bear White:Black)

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

最佳答案

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

我不确定这对你来说是否足够,但对于你的例子,这会起作用:

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

并用一个空格替换。

我会让它更像 Unicode 风格:

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

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

查看here on Regexr

更新:

如果你想在有“Category”之前保留冒号,你可以这样做

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

参见 it on Regexr

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

关于c# - 需要正则表达式来替换仅由字母或数字包围的所有符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12893093/

相关文章:

c# - 工作集 PerformanceCounter 的负载测试未显示超过 4GB

c# - 从其他服务器访问图像

java - Java中unicode值的序列与正则表达式的匹配

javascript - 如何突出显示字符串中的文本?

php - 使用正则表达式 PHP 按空格和连字符拆分句子

c# - 我如何替换要求提升的文件

c# - 如何将元素反序列化为 XmlNode?

css - 正则表达式替换以匹配 css 中的 url() 路径并替换为 asset_path

ruby - 正则表达式匹配除反斜杠以外的任何字符

c# - 在打开表单之前设置所有标签字体