我正在开发一种正则表达式搜索模式,应允许在搜索中包含可选的“+”符号,并在搜索中排除“ - ”符号。例如: + apple orange -peach 应该搜索苹果和橙子而不是桃子。此外,该模式应允许双引号中的短语与单个单词混合,例如:“red apple” - “black grape”+ orange - 您可以获得与大多数互联网搜索相同的想法。 所以我正在运行2个正则表达式,首先选择所有的负数,这很简单,因为' - '是必需的:
(?<=[\-]"?)((?<=")(?<exclude>[^"]+)|(?<exclude>[^\s,\+\-"]+))
第二个选择积极因素,这有点复杂,因为'+'是可选的:
((?<=[\+\s]")(?<include>[^\s"\+\-][^"]+))|(?<include>(?<![\-\w]"?)([\w][^,\s\-\+]+))(?<!")
正面搜索是我遇到问题的地方,当我在RegexBuddy中运行它时效果很好但是当我尝试使用.Net时,模式会从负面标准中获取第二个单词,例如 - “黑葡萄”它会捡起来单词'grape'即使以双引号结尾。
有什么建议吗?
答案 0 :(得分:1)
试试这个表达式:
[\+-]?(\w+|"[\w\s]+")
以+或 - 开头,可选,然后将任何单词或任何单词与引号内的空格匹配 另一条建议:尝试使用正则表达式,下载Expresso或The Regulator等工具。
以下是使用命名组的示例,因此您可以使用正则表达式直接分隔符号和值:
static void Main(string[] args) {
string test = "\"red apple\" -\"black grape\" +orange";
Regex r = new Regex( "(?<sign>[\\+-]?)((?<value>\\w+)|\"(?<value>[\\w\\s]+)\")",RegexOptions.Compiled);
foreach (Match m in r.Matches(test)) {
Console.WriteLine(m.Groups["sign"]);
Console.WriteLine(m.Groups["value"]);
}
}