Получить год из строки (например, Rogue Assassin 2007)

Кажется, я не могу понять, как отнять год от слова Rogue Assassin 2007 и вернуть:

moviename = "Rogue Assassin" 'Whitespace doesn't matter
movieyear = "2007" 'Whitespace doesn't matter

Однако я не могу заставить его работать. Я пытаюсь сделать следующее:

    If System.Text.RegularExpressions.Regex.IsMatch(fn, "[0-9][0-9][0-9][0-9]") Then 'Is this right?
        Dim mtemp As String() = fn.Split(" ") 'Movie temp array
        myear(0) = mtemp.Last 'Attempting to set year to the last split
        For Each z As String In mtemp 'Adding the other elements in mtemp together to remake the title
            If z IsNot mtemp.Last Then
                mtitle(0) = z & " " 'Movie title
            Else
                Exit For
            End If
        Next
        ...
    Else
        ...
    End If

Любая помощь очень ценится!

1
nl ja de
Это всего лишь одна часть из примерно 5 утверждений ... Первые 2 года в фигурных скобках, год в квадратных скобках, затем это, тогда если год находится в имени каталога, то, наконец, ищите по названию.
добавлено автор JosephGarrone, источник
У вас всегда есть год на имя? Будет ли год всегда четырьмя символами или может быть два? Можете ли вы предварительно форматировать значение года, чтобы было легче распознать?
добавлено автор Maurice Reeves, источник

2 ответы

1) Regular expression for matching year strings containing year 1800 to 2013 (ideal regex for obtaining movie year from the title)

1[89][0-9]{2}|200[0-9]|201[0-3]

2) Regular expression for matching year strings containing year from 1800 onwards.

1[89][0-9]{2}|20[0-9]{2}

Have tested the pattern (1) for the below movie titles:

Die Hard 2 1990 -> 1990
Django Unchained (2012) -> 2012
This Is 40 (2012) -> 2012
The Twilight Saga: Breaking Dawn - Part 2 - 2012 -> 2012
Die Hard 4.0 2007 -> 2007

Предположения:

Поскольку формат года не указан в вашем вопросе, и предполагается, что год всегда будет 4-значным.

Названия фильмов могут содержать и другие 4 цифры, и, следовательно, год особенно соответствует 1800 - 2013 годам [который может получать значения года из большинства названий фильмов, и это уменьшает количество нежелательных данных. считайте, что это должно удовлетворить ваши потребности сейчас :)].

2
добавлено

Можешь попробовать

Dim r As Regex = new Regex("(.*)\s+([0-9]+)$");
Dim match As Match = System.Text.RegularExpressions.Regex.Match("Rogue Assassin 2007")

Над кодом будет зафиксировано совпадение на 2 группы, а затем вы можете получить захваченные с помощью match.Groups (1) .Captures (0) .Value and match.Groups (1) .Captures (1) .Value

http://msdn.microsoft.com/en-us/library/twcw2f1c.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

2
добавлено
Итак ... Какое выражение люди рекомендуют? ". * \ s + ([0-9] +) $" или "(\ w +) \ s + ([0-9] +)"
добавлено автор JosephGarrone, источник
Я поместил () вокруг моего исходного кода, и теперь он работает нормально. Я вернусь позже, если что-то начнет расти: D
добавлено автор JosephGarrone, источник
Существует небольшая проблема с этим, поскольку он может соответствовать числовым токенам, которые потенциально не являются датами, например, 90215 названия «Beverly Hills 90215».
добавлено автор Maurice Reeves, источник
Еще один хороший пример того, что я упомянул в своем комментарии.
добавлено автор Maurice Reeves, источник
Я не Regexer ... будет ли ваше Regex работать для «Die Hard 2 1990»?
добавлено автор igrimpe, источник
он не будет работать для «Die Hard 2 1990», но он будет работать с «(. *) \ s + ([0-9] +) $"
добавлено автор neo, источник
\ w имеет некоторые другие проблемы. Он не включает пробел, поэтому вы должны вернуть «Assassin» в качестве первой группы захвата
добавлено автор neo, источник
для обработки «Beverly Hills 90215» вы можете использовать {4}, т. е. «(. *) \ s + ([0-9] {4})"
добавлено автор neo, источник
Если вы будете проверять год между 1900 и 2099 годами, вы можете использовать (. *) \ S + ((19 | 20) [0-9] {2}). Во всяком случае, играть с регулярным выражением - это весело.
добавлено автор neo, источник
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)