Ограничить первый и последний символы пробелами

Я хочу, чтобы регулярное выражение соответствовало чему-то вроде _Hello_ или _Hell No_

Таким образом, требования _ с обеих сторон и некоторый текст между ними. Однако текст не может начинаться с пробела или заканчиваться им (однако они могут содержать пробелы внутри текста).

Я пробовал _[\S]+.*[\S]+_, но это не соответствует, когда в тексте меньше 2 символов, например _H_

Пожалуйста помоги


person Shahrukh sharma    schedule 19.03.2018    source источник


Ответы (4)


Вы можете просто рассматривать односимвольный случай отдельно:

_(\S.*\S|\S)_

Вероятно, вы захотите заменить .* на .*?, чтобы сделать его нежадным. В противном случае вы не сможете правильно сопоставить несколько экземпляров этого шаблона подряд:

_foo_ _bar_
 ^^^^^^^^^
 one match
person Blender    schedule 19.03.2018

Попробуйте следующий шаблон:

_\S(.*\S)?_

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

person Tim Biegeleisen    schedule 19.03.2018

Как насчет этого:

_[^\s+]?.*[^\s+]_

Использование ^ в квадратных скобках означает, что БЕЗ пробелов.
? означает ноль или один из (любой символ, не являющийся пробелом)
.* означает любое количество любых символов

person Lee Gaines    schedule 19.03.2018

Я бы предложил следующую схему:

^_.+_$

Это будет соответствовать первым трем строкам, но не строкам 4 и 5:

_Hello_
_Hello_Hello_
_Hello Hello_
 _Hello_
_Hello_ 
       ^---Trailing space here
person MAGA    schedule 19.03.2018
comment
Это будет соответствовать __, то есть всего двум символам подчеркивания, что может не совпадать с тем, что хочет ОП. - person Tim Biegeleisen; 19.03.2018