Экранирование символа-разделителя при использовании Regex.Split()
Мне нужно разделить строку используя разделитель #. Но в этой строке одна из частей может быть 16-ричным выражением цвета, например, #3ffdca
. Пример строки: color##3ffdca#System.String
.
Если я разделю её по #, то получится 4 части, при этом часть с цветом потеряет решётку. А мне нужно 3 части и чтобы часть с цветом сохранила решётку.
Какое регулярное выражение мне нужно написать в Regex, чтобы этого добиться?
Как вариант ещё думал ставить перед решёткой обратный слэш, чтобы помечать её как не разделитель. Т.е. color#\#3ffdca#System.String
Но тогда тоже вопрос, что мне написать в Regex, чтобы оно разделило строку по #, но если перед # стоит \, то не воспринимало такую решётку, как разделитель?
Ответы (2 шт):
(?<!\\)#(?!.*(?<!\\)#[0-9a-fA-F]{6})
- по идее разделит строку input
по #
, сохраняя решётку перед 16-ричным выражением цвета и игнорируя случаи, когда перед решёткой стоит обратный слэш.
Мне нужно разделить строку используя разделитель #. Но в этой строке одна из частей может быть 16-ричным выражением цвета, например, #3ffdca. Пример строки:
color##3ffdca#System.String
. Если я разделю её по #, то получится 4 части, при этом часть с цветом потеряет решётку. А мне нужно 3 части и чтобы часть с цветом сохранила решётку.
Такое делится без проблем... Пример на JavaScript
const s = 'color##3ffdca#System.String'
const r = /(?<!#)#/
console.log(s.split(r))
Но, если есть возможность повлиять на формирование строки - лучше выбрать уникальный символ для разделителя.