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

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

Например, я хочу сопоставить bla и bla ; bla, но не хочу сопоставлять: bla . bla или bla;, т. е. точка с запятой должна фиксироваться только в том случае, если она стоит между двумя словами, а не в конце строки.


person tubu13    schedule 14.05.2013    source источник
comment
Можете ли вы привести еще несколько примеров того, что будет соответствовать и не соответствовать тому, что вы пробовали?   -  person Explosion Pills    schedule 14.05.2013
comment
Какой язык вы используете? Это важно, потому что у вас может быть или не быть отрицательного прогноза.   -  person Chris Krycho    schedule 14.05.2013
comment
Просто используйте ;(?!$), если вам нужно сопоставить ; не в конце строки/строки.   -  person Wiktor Stribiżew    schedule 18.05.2017


Ответы (2)


Попробуйте этот \w\s*?([;])(?=\s*?\w), который будет соответствовать всем ";" которым предшествуют и за которыми следует пробел и символ слова

введите здесь описание изображения

person Ro Yo Mi    schedule 14.05.2013
comment
Обратите внимание, что он хочет исключить другие знаки препинания ("bla . bla" or "bla;" wont match), но хочет включить окружающие слова и пробелы. Это шаг в правильном направлении, но не совсем там. - person Chris Krycho; 14.05.2013
comment
Я подумал о чем-то вроде ;(?!$) ведьма будет соответствовать любому ; за которым не следует конец строки. но произойдет, если нет ; вообще? это будет соответствовать? - person tubu13; 14.05.2013
comment
Ну, если ';' где в конце строки типа «привет; ' регулярное выражение требует, чтобы ';' за которым следует ноль или более пробелов и символ слова, поэтому конец строки не будет совпадать. Вы можете попробовать это здесь rubular.com/r/IBd8jNIhJj - person Ro Yo Mi; 14.05.2013

Вы можете использовать это:

[a-z]+(?:;[a-z]+)?

если вам нужно больше одного или двух слов, просто замените ? по *

(Обратите внимание: этот шаблон не имеет дело с пробелами, регистрами или некоторыми другими вещами. Вы должны добавить их, если вам нужно)

person Casimir et Hippolyte    schedule 14.05.2013