Экранирование символа-разделителя при использовании Regex.Split()

Мне нужно разделить строку используя разделитель #. Но в этой строке одна из частей может быть 16-ричным выражением цвета, например, #3ffdca. Пример строки: color##3ffdca#System.String. Если я разделю её по #, то получится 4 части, при этом часть с цветом потеряет решётку. А мне нужно 3 части и чтобы часть с цветом сохранила решётку.

Какое регулярное выражение мне нужно написать в Regex, чтобы этого добиться?

Как вариант ещё думал ставить перед решёткой обратный слэш, чтобы помечать её как не разделитель. Т.е. color#\#3ffdca#System.String

Но тогда тоже вопрос, что мне написать в Regex, чтобы оно разделило строку по #, но если перед # стоит \, то не воспринимало такую решётку, как разделитель?


Ответы (2 шт):

Автор решения: Dima Hvatit

(?<!\\)#(?!.*(?<!\\)#[0-9a-fA-F]{6}) - по идее разделит строку input по #, сохраняя решётку перед 16-ричным выражением цвета и игнорируя случаи, когда перед решёткой стоит обратный слэш.

→ Ссылка
Автор решения: ksa

Мне нужно разделить строку используя разделитель #. Но в этой строке одна из частей может быть 16-ричным выражением цвета, например, #3ffdca. Пример строки: color##3ffdca#System.String. Если я разделю её по #, то получится 4 части, при этом часть с цветом потеряет решётку. А мне нужно 3 части и чтобы часть с цветом сохранила решётку.

Такое делится без проблем... Пример на JavaScript

const s = 'color##3ffdca#System.String'
const r = /(?<!#)#/
console.log(s.split(r))

Но, если есть возможность повлиять на формирование строки - лучше выбрать уникальный символ для разделителя.

→ Ссылка