Regex в Ruby для соответствия первого и второго пробела строк - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь получить регулярное выражение для сопоставления первого и второго пробела и ":" из второго столбца строк, как показано ниже, чтобы заменить их на "|". Я построил регулярное выражение ниже, но соответствует противоположному, так как соответствует любому слову, не первому и второму пробелу, ни «:». Может быть, кто-то мог бы помочь с этим.

(\S+\s*) (\S+\s*) (\S+\s*)  # My current regex

Строки похожи на эти.

Usw 12:12 Desktop
Usw 1:2 Netbooks
Usw 1:345 Servers, mainframes and supercomputers

Я бы хотел преобразовать эти строки сверху в эту

Usw|12|12|Desktop
Usw|1|2|Netbooks
Usw|1|345|Servers, mainframes and supercomputers

Ответы [ 3 ]

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

Я думаю, что решение может быть еще проще:

'Usw 12:12 Desktop'.split(/\s|:/, 4).join('|')
#⇒ "Usw|12|12|Desktop"

Вышеприведенное не удастся, если в первом столбце есть двоеточия, но я почти уверен, что это не так.

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

Вы можете использовать String#sub для пошаговой замены символов:

str.sub(/\s/,'|').sub(/:/,'|').sub(/\s/,'|')

Тесты

test = [ "Usw 12:12 Desktop",
         "Usw 1:2 Netbooks",
         "Usw 1:345 Servers, mainframes and supercomputers" ]

test.map { |str| str.sub(/\s/,'|').sub(/:/,'|').sub(/\s/,'|') }                                                                      
 #=> [ "Usw|12|12|Desktop",
 #     "Usw|1|2|Netbooks",
 #     "Usw|1|345|Servers, mainframes and supercomputers" ]
0 голосов
/ 04 мая 2018

Мы можем использовать gsub здесь:

input = String.new("Usw 1:345 Servers, mainframes and supercomputers")
puts input.gsub(/(\S+)\s*(\d+):(\d+)\s*(.*)/, '\1|\2|\3|\4')

Usw|1|345|Servers, mainframes and supercomputers

Демо

Основная идея здесь заключается в том, что мы фиксируем непробельный контент перед первым пробелом, после первого пробела и оставшуюся часть строки после второго пробела. Затем мы создаем строку вывода, которую вы хотите, используя эти группы захвата.

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