正则表达式根据其中的值获取特定匹配括号后的所有内容
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*
匹配可选的空白字符
\([^()]*\)
从左括号到右括号匹配
[^()]*
匹配 (
和 )
以外的可选字符
$
字符串结束
所以我有一个我拥有的黑胶唱片列表,我正试图从他们的 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*
匹配可选的空白字符\([^()]*\)
从左括号到右括号匹配[^()]*
匹配(
和)
以外的可选字符
$
字符串结束