正则表达式根据其中的值获取特定匹配括号后的所有内容
Posted
技术标签:
【中文标题】正则表达式根据其中的值获取特定匹配括号后的所有内容【英文标题】:Regex get everything after specific matched parenthesis based on value inside them 【发布时间】:2021-06-09 00:09:01 【问题描述】:所以我有一个我拥有的黑胶唱片列表,我正在尝试从他们的唱片结果中删除一些文本,字符串可能看起来像这样;
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" 之后的所有内容,所以我假设 add (.)) 会得到 12" 和右括号之间的所有内容,显然不是。有什么想法吗?
【问题讨论】:
【参考方案1】:你可以使用一些简单的东西,比如,
(.*) \(
在regex101.com 上看到它。
要处理新添加的完全没有括号的情况,您可以使用代码。如果没有匹配,只需转储原始字符串。我使用您的示例字符串编写了一个小代码 sn-p。
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
【讨论】:
谢谢,我使用了这个 (.*)(?=[ ]() 来捕获省略最后一个左括号的文本。谢谢。 好的,有一个问题,如果根本没有括号它显示零匹配,我如何得到相反的结果并匹配行的另一端以便.replace? 在这种情况下,您不需要编辑正则表达式。您可以只使用代码来测试匹配并根据结果更改输出。我在答案中添加了一些代码。【参考方案2】:要匹配末尾的括号并将它们替换为空字符串,您可以使用:
\s*\([^()]*\)[^()]*$
模式匹配:
\s*
匹配可选的空白字符
\([^()]*\)
匹配从左括号到右括号
[^()]*
匹配除(
和)
之外的可选字符
$
字符串结束
Regex demo
【讨论】:
以上是关于正则表达式根据其中的值获取特定匹配括号后的所有内容的主要内容,如果未能解决你的问题,请参考以下文章