Ruby разделенная строка, с исключениями - PullRequest
1 голос
/ 05 мая 2020

Я хочу взять строку и разделить ее на подстроку, если перед этой подстрокой не стоит выбранный символ, например \. Легко разделить на строку с помощью функции split(), но что, если я хочу разделить на ' ', если только '\ '.

puts "this is a\ string".split(' ','\ ')
# => ["this", "is", "a string"]

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Вы можете использовать регулярное выражение с отрицательной ретроспективой:

'a b c\ d e'.split(/(?<!\\) /)
=> ["a", "b", "c\\ d", "e"]

Шаблон (?<!\\) соответствует пробелам, которым не предшествует backsla sh.

1 голос
/ 05 мая 2020

Вы можете разделить с помощью регулярного выражения с утверждением отрицательного просмотра назад .

str = "this.is\\.a.string"
str.split(/(?<!\\)\./)
# => ["this", "is\.a", "string"]

(?<!pat) - Утверждение отрицательного просмотра назад: гарантирует, что предыдущие символы не совпадают с pat, но не включают эти символы в совпадающий текст

...