Разделить строку в каждой точке, кроме случаев, когда появляется какое-то слово - PullRequest
0 голосов
/ 02 мая 2018

Я действительно новичок в регулярных выражениях, и сейчас у меня возникают проблемы с решением проблемы. Буду признателен за любую помощь:)

Использование ruby ​​2.4.2

Проблема: разбить строку на каждую точку, кроме случаев, когда слово asd находится после точки

String: str = "qwer.qwer.asd"
Code: str.split(/\./)
Output: ["qwer", "qwer", "asd"]

The output should be: ["qwer", "qwer.asd"]

1 Ответ

0 голосов
/ 02 мая 2018

Использование

str.split(/\.(?!asd\b)/)

Шаблон \.(?!asd\b) соответствует любой точке, за которой не следует asd, за которой следует граница слова. (?!asd\b) - это отрицательный прогноз , который не может найти совпадение, если шаблон прогнозирования сразу находит совпадение справа от текущего местоположения.

В случае, если «слово» оканчивается точкой или концом строки, используйте

str.split(/\.(?!asd(?:\.|\z))/)

где (?:\.|\z) - группа без захвата, соответствующая либо точечному (\.), либо (|) концу строки (\z).

См. Демонстрационную версию Ruby и демонстрационную версию regex .

...