簡體   English   中英

用於包含和排除搜索的正則表達式模式

[英]Regex pattern for searches with include and exclude

我正在針對正則表達式模式進行搜索,該模式應允許在搜索中包括可選的“ +”號,並從搜索中排除“-”號。 例如: + apple orange -peach應該搜索蘋果和橙子,而不是桃子。 此外,該模式還應允許在雙引號中加上包含單個單詞的短語,例如: “紅蘋果”-“黑葡萄” +橙色 -與大多數Internet搜索一樣,您可以理解。 所以我正在運行2個正則表達式,首先選擇所有負數,這很簡單,因為需要'-':

(?<=[\-]"?)((?<=")(?<exclude>[^"]+)|(?<exclude>[^\s,\+\-"]+))

其次,選擇正值,這有點復雜,因為“ +”是可選的:

((?<=[\+\s]")(?<include>[^\s"\+\-][^"]+))|(?<include>(?<![\-\w]"?)([\w][^,\s\-\+]+))(?<!")

正向搜索是我遇到的一個問題,當我在RegexBuddy中運行它時,它可以很好地工作,但是當我在.Net中嘗試時,該模式從否定條件中選擇了第二個單詞,例如在“黑葡萄”中,它選擇了單詞“葡萄” '即使以雙引號結尾。

有什么建議么?

試試這個表達式:

[\+-]?(\w+|"[\w\s]+")

以+或-開頭(可選),然后匹配任何單詞或帶引號的任何單詞。
另一個建議:要嘗試使用正則表達式,請下載ExpressoThe 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"]);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM