我正在研究一个Regex模式的搜索,应该允许可选的'+‘符号包括在搜索和'-’符号排除在搜索之外。例如:+苹果橙-peach应该搜索苹果和橘子,而不是桃子。此外,这种模式应该允许双引号中的短语与单个单词混合使用,例如:“红苹果”--“黑葡萄”+橙色--你得到了这个想法,就像大多数互联网搜索一样。所以我运行两个正则表达式,首先选择所有的否定句,这很简单,因为'-‘是必需的:
(?<=[\-]"?)((?<=")(?<exclude>[^"]+)|(?<exclude>[^\s,\+\-"]+))第二,选择积极的词,这有点复杂,因为'+‘是可选的:
((?<=[\+\s]")(?<include>[^\s"\+\-][^"]+))|(?<include>(?<![\-\w]"?)([\w][^,\s\-\+]+))(?<!")积极搜索是我遇到问题的地方,当我在RegexBuddy中运行它时,它工作得很好,但是当我尝试使用.Net时,模式会从负面标准中提取第二个单词,例如--“黑葡萄”--它会提取‘葡萄’这个词,尽管它以双引号结尾。
有什么建议吗?
发布于 2010-03-15 09:02:22
试试这个表达式:
[\+-]?(\w+|"[\w\s]+")以+或-开头,可选,然后匹配任何单词或任何单词中的空格引号。
另一个建议是:尝试使用正则表达式,下载像特普索或调整器这样的工具。
下面是一个使用命名组的示例,因此您可以直接用regex分隔符号和值:
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"]);
}
}https://stackoverflow.com/questions/2443934
复制相似问题