Groovy - Как разделить строку, содержащую несколько имен файлов, но некоторые из них содержат пробелы? - PullRequest
0 голосов
/ 28 октября 2018

Как разбить строку, содержащую количество имен файлов (включая имена, содержащие пробелы)?

Пример строки:

randomFolderNameA/path/to/file1.java randomFolderNameB/path/to/file2.sql randomFolderNameC/path/to/file3 with space.xml file4 with space.sql 

Ожидаемый результат:

randomFolderNameA/path/to/file1.java
randomFolderNameB/path/to/file2.sql
randomFolderNameC/path/to/file3 with space.xml
file4 with space.sql 

1 Ответ

0 голосов
/ 28 октября 2018

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

def text = "/path/to/file1.java /path/to/file2.sql /path/to/file3 with space.xml"
println text.split(" (?=/)")

И это выдает [/path/to/file1.java, /path/to/file2.sql, /path/to/file3 with space.xml]

Taht регулярное выражение разделяет строку на пробелсопровождаемый /


РЕДАКТИРОВАТЬ: Для обновленного примера можно посмотреть на расширения в именах файлов, хотя вам необходимо тщательно рассмотреть, что ваш ввод можетinclude:

def text = "randomFolderNameA/path/to/file1.java randomFolderNameB/path/to/file2.sql randomFolderNameC/path/to/file3 with space.xml file4 with space.sql"

println text.split("(?<=\\.[a-zA-Z0-9]{1,4}) ")

Выводит следующее, как и ожидалось:

[randomFolderNameA/path/to/file1.java, 
 randomFolderNameB/path/to/file2.sql, 
 randomFolderNameC/path/to/file3 with space.xml, 
 file4 with space.sql]

Но, как отмечено выше, вы должны быть уверены, что пути содержат только имена файлов, а регулярное выражение расширения допустимо(Я использовал «точку, за которой следуют от 1 до 4 буквенно-цифровых символов»)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...