Exclude/include 正则表达式模式

Exclude/include regex patterns

我想尝试制作更多类型的正则表达式,所以我一直在尝试制作以下作品。

这是我的表达:https://regex101.com/r/VzspFy/4/

在测试字符串上,前3个很好,所以必须匹配这样的模式,问题是最后一个,我不想被包括在内,所以我尝试这样做:

https://regex101.com/r/9HVKTK/2

还有这个:

https://regex101.com/r/9HVKTK/1

但运气不好!

主要思想是:

`aaa ... bbb ccc` -> must match
`ccc ... (aaa|ddd|eee) ... bbb ccc` -> should not match

我怎样才能让它工作或者更好的实现?

针对您的问题,这是一个相对简单的正则表达式:

(?:(?<=[-]\s)(?:ITA\s)?\w{3}\s\w{3}\s[-]\s\w{3}\s\w{3}\s\w{3}\b)|(?:Eng\.sub\.ita)

你可以test out here

正则表达式:

(?<=[-]\s) 是正数 look-behind,它确保匹配前面有破折号和 space(但不匹配它们)

(?:ITA\s)? 是一个 non-capturing 组,它告诉正则表达式如果匹配前面有 "ITA" 和 space,则也匹配它们。

\w{3} 匹配三个单词字符的字符串(letters/numbers/underscore 或它们的组合)

\s表示单个space,而

[-] 只是匹配单个 -.

的一种奇特方式

|(?:Eng\.sub\.ita) 告诉正则表达式将 eng.sub.ita (case-insensitive) 与原始匹配项一起出现在一个句子中。

请注意:

如果节目名称包含类似 - red SEO - two one 或 'dash-space-three_letters-space-three_letters-space-dash-space-three_letters-space-three_letters' 的内容,那么即使是节目名称也会被匹配。

但是,包含这种格式的节目的可能性可以忽略不计,因此您不必担心。

您可以使用

var rx = new Regex(@"(?:^|])(?:(?!\b(?:eng|ita)\b)[^]])*\b(eng(?:\W+\w+)?\W+sub\W+ita)\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);

参见regex demo。您需要获取第 1 组值。

图案详情

  • (?:^|]) - 字符串的开头或 ](如果您将多行字符串作为输入,请添加 | RegexOptions.Multiline,但我想这些都是独立的字符串)
  • (?:(?!\b(?:eng|ita)\b)[^]])* - 除 ] 以外的任何字符,尽可能多,不以 engita 开头的整个单词(参见 更好地理解这个结构)
  • \b - 单词边界
  • (eng(?:\W+\w+)?\W+sub\W+ita) - 第 1 组:
    • eng - 文字子串
    • (?:\W+\w+)? - 任意 1+ non-word 个字符的可选序列,后跟 1+ 个单词字符(实际上,一个可选单词)
    • \W+ - 1+ non-word 个字符
    • sub - 文字子串
    • \W+ - 1+ non-word 个字符
    • ita - 文字子串
  • \b - 单词边界

参见 C# demo:

var strs = new List<string> { 
        "Lucifer S03e15 [XviD - Eng Mp3 - Sub Ita Eng] DLRip By Pir8 [CURA] Fede e Religioni",
        "Lucifer S03e15 [XviD - Eng Mp3 - Sub Ita Eng] DLRip By Pir8 [CURA] Fede e Religioni",
        "Lucifer S03e01-08 [XviD - Eng Mp3 - Sub Ita Eng] DLRip By Pir8 [CURA] Fede e Religioni SEASON PREMIERE",
        "Young Sheldon S01e13 [SATRip 720p - H264 - Eng Ac3 - Sub Ita] HDTV by AVS",
        "Young Sheldon S01e08 [Mux 1080p - H264 - Ita Eng Ac3 - Sub Ita Eng] WEBMux Morpheus",
        "Young Sheldon S01e08 [Mux 1080p - H264 - Ita Eng Ac3 - Sub Ita Eng] WEBMux Morpheus",
        "Young Sheldon S01e14 [SATRip 720p - H264 - Eng Ac3 - Sub Ita] HDTV by AVS",
        "Lucifer S03e15 [XviD - Eng Mp3 - Sub Ita Eng] DLRip By Pir8 [CURA] Fede e Religioni",
        "Lucifer S03e16 [XviD - Eng Mp3 - Sub Ita Eng] DLRip By Pir8 [CURA] Fede e Religioni",
        "Lucifer S02e01-13 [XviD - Eng Mp3 - Sub Ita] DLRip by Pir8 [CURA] Fede e Religioni FULL ",
        "Absentia S01e01-10 [Mux 1080p - H264 - Ita Eng Ac3 - Sub Ita Eng] By Morpheus The.Breadwinner.2017.ENG.Sub.ITA.HDRip.XviD-[WEB]"
    };
var rx = new Regex(@"(?:^|])(?:(?!\b(?:eng|ita)\b)[^]])*\b(eng(?:\W+\w+)?\W+sub\W+ita)\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
foreach (var s in strs)
{
    Console.WriteLine(s);
    var result = rx.Match(s);
    if (result.Success)
        Console.WriteLine("Matched: {0}", result.Groups[1].Value);
    else
        Console.WriteLine("No match!");
    Console.WriteLine("==========================================");
}

输出:

Lucifer S03e15 [XviD - Eng Mp3 - Sub Ita Eng] DLRip By Pir8 [CURA] Fede e Religioni
Matched: Eng Mp3 - Sub Ita
==========================================
Lucifer S03e15 [XviD - Eng Mp3 - Sub Ita Eng] DLRip By Pir8 [CURA] Fede e Religioni
Matched: Eng Mp3 - Sub Ita
==========================================
Lucifer S03e01-08 [XviD - Eng Mp3 - Sub Ita Eng] DLRip By Pir8 [CURA] Fede e Religioni SEASON PREMIERE
Matched: Eng Mp3 - Sub Ita
==========================================
Young Sheldon S01e13 [SATRip 720p - H264 - Eng Ac3 - Sub Ita] HDTV by AVS
Matched: Eng Ac3 - Sub Ita
==========================================
Young Sheldon S01e08 [Mux 1080p - H264 - Ita Eng Ac3 - Sub Ita Eng] WEBMux Morpheus
No match!
==========================================
Young Sheldon S01e08 [Mux 1080p - H264 - Ita Eng Ac3 - Sub Ita Eng] WEBMux Morpheus
No match!
==========================================
Young Sheldon S01e14 [SATRip 720p - H264 - Eng Ac3 - Sub Ita] HDTV by AVS
Matched: Eng Ac3 - Sub Ita
==========================================
Lucifer S03e15 [XviD - Eng Mp3 - Sub Ita Eng] DLRip By Pir8 [CURA] Fede e Religioni
Matched: Eng Mp3 - Sub Ita
==========================================
Lucifer S03e16 [XviD - Eng Mp3 - Sub Ita Eng] DLRip By Pir8 [CURA] Fede e Religioni
Matched: Eng Mp3 - Sub Ita
==========================================
Lucifer S02e01-13 [XviD - Eng Mp3 - Sub Ita] DLRip by Pir8 [CURA] Fede e Religioni FULL 
Matched: Eng Mp3 - Sub Ita
==========================================
Absentia S01e01-10 [Mux 1080p - H264 - Ita Eng Ac3 - Sub Ita Eng] By Morpheus The.Breadwinner.2017.ENG.Sub.ITA.HDRip.XviD-[WEB]
Matched: ENG.Sub.ITA
==========================================