C# Regex-在替换的字符之间添加空格
我有一个regexC# Regex-在替换的字符之间添加空格,c#,regex,C#,Regex,我有一个regex@“\bAND\b|\bOR\b|”“| \(| \)”,它从字符串中去掉某些单词或字符。我的问题是,如果使用以下文本: “入耳式”或“入耳式”耳机 当我使用regex.replace时,regex成功地串出“OR”,但这两个查询将混合在一起 耳朵式耳机 只有当我要删除的单词和其他查询词之间没有空格时,才会发生这种情况。有没有一种优雅的方法可以在我想要删除的关键字之间添加空格,如果没有的话。我知道这听起来可能很傻,但是你是否尝试过用一个空格代替它,而不是仅仅删除它?在替换文本中
@“\bAND\b|\bOR\b|”“| \(| \)”
,它从字符串中去掉某些单词或字符。我的问题是,如果使用以下文本:
“入耳式”或“入耳式”耳机
当我使用regex.replace时,regex成功地串出“OR”,但这两个查询将混合在一起
耳朵式耳机
只有当我要删除的单词和其他查询词之间没有空格时,才会发生这种情况。有没有一种优雅的方法可以在我想要删除的关键字之间添加空格,如果没有的话。我知道这听起来可能很傻,但是你是否尝试过用一个空格代替它,而不是仅仅删除它?在替换文本中添加一个空格,然后创建一个后续的正则表达式替换,在不满足此条件时去掉2个或更多的空格 这样可以保证每个单词之间有一个空格 为了简洁起见,这是一个基本示例(没有引用
”或“
”),但概念相同:
Regex.Replace(Regex.Replace(txt, "OR", " "), @"\s\s", " ")
结果
Over ear headphones on ear headphones
这应该保留现有格式(以及预期的格式) 要使用非换行空白,请将
\s
替换为[^\s\r\n]
或类似的
只需选择在表达式的任一侧使用一个空格,然后替换为您选择的空格 这是在用文本包围的项目上完成的
A<sp><item>B => A<sp>B
A<sp><item>B<sp> => A<sp>B
A<item><sp>B => A<sp>B
A<item>B => A<sp>B
#
输出
"Over ear headphones"OR"on ear headphones"
Over ear headphones on ear headphones
尝试用空格替换。如果您首先匹配任何空格,比如:
Regex.replace(txt、@“或\s*”、“”),会不会更容易代码>?这样你就不必调用Regex.Replace两次了。@JulianA把它作为一个答案放进去。:-)
string sTrg = @"""Over ear headphones""OR""on ear headphones""";
Console.WriteLine("{0}", sTrg);
Regex rX = new Regex(@"(^)?\s?(?:\b(?:AND|OR)\b|[()""])+\s?($)?");
Console.WriteLine("{0}", rX.Replace(sTrg,
delegate (Match m) {
if (m.Groups[1].Success || m.Groups[2].Success)
return "";
return " ";
}));
"Over ear headphones"OR"on ear headphones"
Over ear headphones on ear headphones