首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包含和排除搜索的Regex模式

包含和排除搜索的Regex模式
EN

Stack Overflow用户
提问于 2010-03-14 21:57:05
回答 1查看 1.6K关注 0票数 2

我正在研究一个Regex模式的搜索,应该允许可选的'+‘符号包括在搜索和'-’符号排除在搜索之外。例如:+苹果橙-peach应该搜索苹果和橘子,而不是桃子。此外,这种模式应该允许双引号中的短语与单个单词混合使用,例如:“红苹果”--“黑葡萄”+橙色--你得到了这个想法,就像大多数互联网搜索一样。所以我运行两个正则表达式,首先选择所有的否定句,这很简单,因为'-‘是必需的:

代码语言:javascript
运行
复制
(?<=[\-]"?)((?<=")(?<exclude>[^"]+)|(?<exclude>[^\s,\+\-"]+))

第二,选择积极的词,这有点复杂,因为'+‘是可选的:

代码语言:javascript
运行
复制
((?<=[\+\s]")(?<include>[^\s"\+\-][^"]+))|(?<include>(?<![\-\w]"?)([\w][^,\s\-\+]+))(?<!")

积极搜索是我遇到问题的地方,当我在RegexBuddy中运行它时,它工作得很好,但是当我尝试使用.Net时,模式会从负面标准中提取第二个单词,例如--“黑葡萄”--它会提取‘葡萄’这个词,尽管它以双引号结尾。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2010-03-15 09:02:22

试试这个表达式:

代码语言:javascript
运行
复制
[\+-]?(\w+|"[\w\s]+")

以+或-开头,可选,然后匹配任何单词或任何单词中的空格引号。

另一个建议是:尝试使用正则表达式,下载像特普索调整器这样的工具。

下面是一个使用命名组的示例,因此您可以直接用regex分隔符号和值:

代码语言:javascript
运行
复制
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"]);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2443934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档