我需要一个正则表达式来替换仅由字母或数字包围的所有符号。有了空格,我将使用 C# 来运行表达式,我可以接受只卡在正则表达式部分的部分。
所以替换后如下
- Type-01 将是 Type 01
- 01)* 仍然是 01)*
- -Category:Toys 仍然是 -Category:Toys
- 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 属性。
更新:
如果你想在有“Category”之前保留冒号,你可以这样做
(?<=\w)(?:[^a-zA-Z0-9*()\s:]+|(?<!Category):)(?=\w)
参见 it on Regexr
我将冒号添加到否定字符类中,表示不要替换冒号。然后我添加了一个替代方法 say:替换冒号,但前提是之前没有“Category”。
关于c# - 需要正则表达式来替换仅由字母或数字包围的所有符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12893093/