我需要一个正则表达式来仅用字母或数字替换所有符号。有了空格,我将使用C#来运行表达式,我可以将部分卡在正则表达式部分上。
所以在更换之后
当前表达
(?<=\w)[^a-zA-Z0-9Category:]+(?=\w)
输入字符串是
- 类别:玩具和(泰迪熊类型01 *)或(泰迪熊白色:黑色)
必需的输出
- 类别:玩具和(泰迪熊类型01 *)或(泰迪熊白色黑色)
但我得到的是
- 类别:玩具和泰迪熊类型01或泰迪熊白色:黑色)
不确定我是否只是遗漏了一些简单的东西或只是错误的结束了
答案 0 :(得分:2)
您不能将单词放入字符类。那里的所有字符都会添加到该类中,顺序无关紧要。
我不确定这对你是否足够,但对于你的例子,这将有效:
(?<=\w)[^a-zA-Z0-9*:()\s]+(?=\w)
并替换为单个空格。
我会使它更具Unicode风格:
(?<=\w)[^\p{L}0-9*:()\s]+(?=\w)
其中\p{L}
是任何语言的字母的Unicode属性。
<强>更新强>
如果您想要保留冒号,如果有“类别”之前可以这样做
(?<=\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]", " ");