0

我正在编写一个正则表达式来匹配来自 IMDb 音轨数据文件的数据。我的正则表达式大部分都在工作,尽管它们在我的命名组中插入了太多文本。以下面的正则表达式为例:

"^  Performed by '?(?<performer>.*)('? \(qv\))?$"

表演者组包括字符串' (qv)以及表演者的姓名。不幸的是,由于记录的格式不一致,一些表演者的名字用单引号引起来,而另一些则没有。这意味着就正则表达式而言,它们是可选的。

我尝试使用?>组说明符将最后一组标记为贪婪组,但这似乎对结果没有影响。

我可以通过更改执行者组以匹配一小部分字符来改进结果,但这会降低我正确解析名称的机会。此外,如果我只是排除撇号字符,我将无法解析包含撇号的乐队名称,例如 Elia 的 Lonely Friends Band,他们在Resident Evil: Apocalypse中表演了Run For Your Life

更新: 这是正则表达式应按要求匹配的示例输入行。还提供了我现有的正则表达式无法处理的其他格式。

"  Performed by 'Carmen Silvera' (qv)"
4

1 回答 1

2

这是您当前问题的解决方案,尽管我查看了 IMDB 音轨数据文件,但这并不能解决其中的所有问题。

var exp = new Regex(@"^  Performed by '?(?<performer>.*?)('? \(qv\))?$");

基本上,您需要对执行者匹配指定非贪婪搜索。

我将添加一条评论来解释为什么这对您的项目长期而言不够好。

于 2010-06-14T00:46:58.730 回答