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

Функция как: str.split('.','\.')

Как при разделении на <aString>, если ему не предшествует <aChar>

puts "this.is.a\.string".split('.','\.')
# => ["this", "is", "a.string"]
1
Michael Sisko 5 Май 2020 в 04:54

2 ответа

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

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

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

1
sergio 5 Май 2020 в 02:03

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

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

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

1
coreyward 5 Май 2020 в 02:03