Используя C #, вы можете сделать что-то вроде
string[] result = Regex.Split(
" foo@bar.com , baz@acme, bill@bing.co.uk ,inv liad , thing ",
@"(\b[^,]+\b)"
);
Регулярное выражение соответствует любой части, которая, по вашим словам, является потенциальным адресом электронной почты.Разделение на это во время захвата (окружающее ()
) вставляет элементы, соответствующие как отдельные элементы.
Совпадение объяснено:
\b A word boundary
[^,]+ Any number of, but at least one, characters that isn't a comma.
\b Another word baoundary
См. Здесь в Regex Storm
См. Здесь на ideone .
Редактировать
Скорректировано в соответствии с комментарием (вопрос о том, что позиции были;) Требуются совпадения с \b[^,]+\b|[ ,]+
.
Здесь в ideone .
Выход
(0, 2) | |
(2, 11) |foo@bar.com|
(13, 4) | , |
(17, 8) |baz@acme|
(25, 2) |, |
(27, 15) |bill@bing.co.uk|
(42, 2) | ,|
(44, 8) |inv liad|
(52, 3) | , |
(55, 5) |thing|
(60, 2) | |
иллюстрация с использованием JS:
var sInput = ' foo@bar.com , baz@acme, bill@bing.co.uk ,inv liad , thing ',
re = /\b[^,]+\b|[ ,]+/g,
m;
while ((m = re.exec(sInput)) !== null) {
console.log(`(${m.index},${re.lastIndex-m.index}) |${m[0]}|`);
}