Почему мой шаблон прерывается из-за непостоянных разрывов строк?

Я пытаюсь разобрать описание файла календаря ics вот так введите описание изображения здесь

Для PCRE это работает нормально, но когда я пытаюсь преобразовать это для iOS/ICU, я получаю следующий результат:

let descriptionRegex = "(?m)DESCRIPTION:(.*(?:\\n :?.*)*)"

Возвращает: "What is the purpose of the stand up meeting? \nIt is a 15 "

При преобразовании этого выражения ICU какое изменение я не учел?

Первоначальный текст:

DESCRIPTION:The purpose of a retrospective meeting is to reflect on th
 e previous sprint together with the development team to learn from our
  mistakes. \nIs the team performing well or what can we do to improve 
 our way of working\, our efficiency\, and so on. \nAny topic can be di
 scussed\, we strive for open communication in this meeting to continuo
 usly improve as a team. \n\nWe try to list: \n - Engine
 : what is working well and what do we continue doing? \n - Anchor
 : what didn't we do well or what went wrong\, so what do we stop doing
  or can be improved? \n - Try
 : which actions do we take\, which things do we try in the next sprint
  to improve? \n\nAfter the retrospective\, I want to have a look at th
 e sprint plan\, to decide which user stories we work on next with the 
 team.

1 ответ

Решение

Может оказаться, что в вашем файле разные последовательности новой строки (\r или же \r\n или просто \nили даже смешанный). Таким образом, вы можете попробовать заменить \n в вашем регулярном выражении с \R,

Кроме того, если вы хотите сопоставить некоторое неизвестное количество символов между некоторыми разделителями, вы можете использовать (?s)DEL1(.*?)(?=DEL2) регулярное выражение, которое можно развернуть для достижения лучшей производительности в зависимости от DEL2 разделитель.

Вот один для вашего сценария:

(?m)^DESCRIPTION:([^\n]*(?:\n++(?![A-Z]+:)[^\n]*)*)

Посмотреть демо-версию регулярного выражения

[^\n]*(?:\n++(?![A-Z]+:)[^\n]*)* часть является развернутой версией (?ms).*?(?=^[A-Z]+:), Преимущество развернутого регулярного выражения в том, что оно не зависит от модификатора DOTALL. Может совпадать по нескольким строкам. Кроме того, производительность обычно намного лучше по сравнению с ленивым шаблоном сопоставления точек.

Другие вопросы по тегам