我正在搜索页面上处理用户输入。如果用户选择“所有单词”类型搜索,则从搜索文本中删除任何布尔搜索运算符,并在每个真实单词之间粘贴' AND '
。在大多数情况下非常简单。但是,我无法弄清楚如何连续删除两个布尔运算符。
这是我的代码:
// create the regex
private static Regex _cleaner =
new Regex("(\\s+(and|or|not|near)\\s+)|\"",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
// call the regex
_cleaner.Replace(searchText, " ")
当用户输入coffee and not tea
之类的搜索字符串时,会出现此问题。正则表达式将删除'和',但不删除'不'。结果串是“咖啡因茶” - 我想要的是'咖啡茶'。
正则表达式中需要空格,所以当嵌入真实单词(如'band'或'corps')时,我不会删除'和','或'等。
我通过两次调用clean方法暂时解决了这个问题,这将连续删除两个运算符(这可能就是我所需要的)。但它不是很优雅,是吗?我真的很想做对。我觉得我错过了一些简单的事情......
答案 0 :(得分:3)
尝试添加字边界:
"\\b(and|or|not|near)\\b|\""
答案 1 :(得分:1)
将正则表达式更改为以下内容:
private static Regex _cleaner = new Regex("(\\s+(and|or|not|near)\\s+)*|\"", RegexOptions.Compiled | RegexOptions.IgnoreCase);
答案 2 :(得分:0)
不只是添加+
来解决问题吗?
private static Regex _cleaner =
new Regex("(\\s+(and|or|not|near)\\s+)+|\"",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
// call the regex
_cleaner.Replace(searchText, " ")
答案 3 :(得分:0)
您的正则表达式不匹配,因为您在术语的每一侧都需要空格,但由于它不是_and__not_
,因此您只匹配_and_
。
考虑这个正则表达式:
@"(?:and|or|not|near)\s+|"""