2016-03-23 2 views
0

В настоящее время я пытаюсь сделать выражение, которое захватывает все запятые, у которых нет пробела после них, и всех двоеточий.Регулярное выражение для запятых без пробела после них

Я пробовал (,([^\s]))|([:]), который близок, но также, кажется, захватывает символ после запятой, у которой нет места.

Я также пробовал (,\s+)|([:]), который захватит все двоеточия и все запятые с пробелом после них, а также пространство.

То, что я хотел бы быть выбран заключен в * в следующем:

Здравствуйте, мое имя *: * tibsar *, * хорошо?

Любые идеи?

+1

Есть ли у вас примеры действительных матчей, которые вы ожидаете? –

+0

@noob обновил вопрос! –

ответ

7

Я думаю, что это регулярное выражение выполнит работу.

Regex:(,(?=\S)|:)

Объяснение:

  • (?=\S) Этот positive lookahead проверяет характер после ,, который не является whitespace но не захватить его в матче. [^\s] такой же, как \S.

  • И использовано изменение | для соответствия : которое может появиться где угодно.

Regex101 Demo

To match , at end of line(if needed).


Где вы заладилось с (,([^\s]))|([:]) и (,\s+)|([:])?

  • (,([^\s])) ли соответствует запятой с последующим непробельного но также захватывает его в матче.

  • (,\s+) Straightaway соответствует запятой, а затем пробелом, так что это совершенно неправильно.

+0

, который сработал! Я буду отмечать, когда смогу –

+0

. Рад, что это так. –

+0

Обратите внимание, что это не будет работать в конце строки/строки (потому что конец строки не является символом и, следовательно, не будет соответствовать '\ S'.Вероятно, вы должны вместо этого использовать * negative * lookahead: ', (?!)'. @tibsar: Заметьте, что '\ S' (и' \ s') довольно широкие и покрывают намного больше, чем просто пробелы. На всякий случай, разница между пространством и вкладкой важна для вас. – Joey

Смежные вопросы