正则表达式根据其中的值获取特定匹配括号后的所有内容

Regex get everything after specific matched parenthesis based on value inside them

所以我有一个我拥有的黑胶唱片列表,我正试图从他们的 discog 结果中删除一些文本,字符串可能看起来像这样;

Artist - Title (12") (Warner Bros - WB1210)
Artist - Title (12", Promo) (Warner Bros - WB1212)
Artist - Title (Summer Mix) (12", Promo) (Warner Bros - WB1444)
Artist - Title (12", LP Album) (Warner Bros- - WB9449)
Artist - Title (12", Red) (Warner Bros - WB1211)
Artist - Title

我想删除最后一组括号,以便他们阅读;

Artist - Title (12")
Artist - Title (12", Promo)
Artist - Title (Summer Mix) (12", Promo)
Artist - Title (12", LP Album)
Artist - Title (12", Red)
Artist - Title

我已经尝试过这种正则表达式模式,但没有成功;

(?<=\(12"(.*)\)[ ]).*

如果我只使用 (?<=(12").) 突出显示 12" 之后的所有内容,所以我假设添加 (.)) 会得到 12" 之间的所有内容和右括号,显然不是。有什么想法吗?

你可以使用一些简单的东西,比如,

(.*) \(

看到它在 regex101.com 上运行。


要处理新添加的完全没有括号的情况,您可以使用代码。如果没有匹配,则直接转储原始字符串。我使用您的示例字符串写了一小段代码。

string[] testStrings = new[] { "Artist - Title (12\") (Warner Bros - WB1210)", "Artist - Title (12\", Promo) (Warner Bros - WB1212)", "Artist - Title (Summer Mix) (12\", Promo) (Warner Bros - WB1444)", "Artist - Title (12\", LP Album) (Warner Bros- - WB9449)", "Artist - Title (12\", Red) (Warner Bros - WB1211)", "Artist - Title" };
Regex regex = new Regex(@"(.*) \(");
foreach (var s in testStrings)
{
    Match match = regex.Match(s);
    Console.WriteLine(match.Success ? match.Groups[1].Value : s);
}

这输出

Artist - Title (12")
Artist - Title (12", Promo)
Artist - Title (Summer Mix) (12", Promo)
Artist - Title (12", LP Album)
Artist - Title (12", Red)
Artist - Title

要匹配末尾的括号并将其替换为空字符串,您可以使用:

\s*\([^()]*\)[^()]*$

模式匹配:

  • \s* 匹配可选的空白字符
  • \([^()]*\) 从左括号到右括号匹配
  • [^()]* 匹配 ()
  • 以外的可选字符
  • $ 字符串结束

Regex demo