Вы можете использовать это регулярное выражение, чтобы разделить на:
([^\w:]\s[^\w:]?|\s[^\w:])
Он ищет не- (слово или :
) символ, за которым следует пробел, за которым следует необязательный не- (слово или :
) персонаж; или пробел, за которым следует не (слово или :
) символ. Это будет соответствовать всем вашим желаемым шаблонам разделения. В PHP (обратите внимание, вам нужен модификатор u
для работы с символами Юникода):
$input = "CADAVRES [FILM] (Canada : Québec, Érik Canuel, 2009, long métrage) FICTION";
$keywords = preg_split('/([^\w:]\s[^\w:]?|\s[^\w:])/u', $input);
print_r($keywords);
Вывод:
Array
(
[0] => CADAVRES
[1] => FILM
[2] => Canada : Québec
[3] => Érik Canuel
[4] => 2009
[5] => long métrage
[6] => FICTION
)
Демонстрация на 3v4l.org [ 1111]
На основе моего опыта, работающего с некоторыми крупными приложениями, которые смешивают VB и проекты C#, я рекомендовал бы оставить его в VB.NET. Если существуют проблемы с дизайном, то фиксируют их, но преобразование всего этого к C# походит на грязное, ненужное отвлечение мне.
Нестилистические различия между этими двумя языками очень минимальны, таким образом, трудно видеть функциональную потребность, которая вызвала бы преобразование. (Была старая ошибка в Visual Studio 2003, который исключил определенные цепочки ссылок проекта, которые смешали C# и проекты VB в особенных методах, но это - единственное, с которым я когда-либо сталкивался как практическое препятствие.)
Отдельные разработчики, конечно, склонны иметь стилистическое предпочтение, способствующее один или другой, но полное преобразование является большой работой, чтобы сделать для чего-то, что составляет вкус к другой разновидности синтаксического сахара.
При использовании чего-то как Отражатель или Анакрино его вывод основан на IL, а не первоисточнике. Производит ли это код, который это, немного лучше открыто для дебатов... Но Вы могли испытать его, так или иначе.:)
Хранение его в его текущей форме проблематично, так как это использует часть 'плохого дизайна' методы, которые VB.NET позволяет и далее усложнил бы будущее maintanence.
И Вы думаете, что C# не будет допускать плохие проекты?
Проблемой не является VB, проблемой является парень, который записал это и парень, отказывающийся зафиксировать его. Поэтому предпримите шаги назад, дыхание глубоко, затем начните исправлять код. И кто знает, можно узнать, что некоторые из тех 'плохих методов дизайна' на самом деле имеют большой смысл.
Я использовал C-заточку, чтобы сделать преобразование на некоторых наших приложениях, но это совсем не прекрасно. Это преобразовало примерно 95% кода, и я закончил тем, что осуществил рефакторинг, в то время как я вручную фиксировал остающиеся 5%.
В моем задании мы использовали переводчика developerfusion, но ничто автоматизированное (просто переводят часть кода или класса, и вручную вставляют результат в c# проекте).
Отражатель является большим инструментом, но можно найти некоторые проблемы при чтении функций лямбды.
Для рефакторинга лучший инструмент, который мы попробовали, Осуществляют рефакторинг Pro.
У меня есть некоторые события в VB.NET приблизительно 2 года, но теперь я только использую C# в своей ежедневной разработке. Прежде чем я пытался использовать VB.Net для C# для преобразования моего кода VB.NET в C#, затем я извлек уроки из него и также из книги.