Как найти слова из одного-двух букв, после которых идет пробел?
Вот моя регулярка \b([a-z]{1,2}) +, нужно чтобы в следующей строке найдены было только символы y, она, к сожалению, находит и z: yy y xxx yy xxx-zz xx.
Реализация на питоне, если это имеет значение.
UPD: прошу воздержаться от ^$, поиск по всему документу.
UPD2: отредактировал пример, добавив yy в начало.
UPD3: после слова пробел, \s хватает и переносы, я его в пример запихнул, потому что пробел не видно. Отредактировал.
UPD4: отредактировал пример, добавил односимвольное слово для наглядности.
OVK2015: С Sharp:
вот тут сломал yy y yy xxx-zz xx.
даже с учетом {1,2} третий по счету игрик (второе слово из одной буквы), не работает, хз почему. Кстати (?:\s|$) можно выкинуть, там пробел всего-то нужен.
magic4x: OVK2015: Что-то я все поломал ) ничего не работает
'yy'у меня не ловится. Там получается,что перекрываются найденные выражения. Может из-за этого,может кривые руки
OVK2015: начало все верно, слово может быть вначале строки, а может в начале предложения, что значит перед ним обязательно будет пробел. Я же выше написал: поиск слов, вот пример "Че_ж_ты_раньше-то молчал" -- подчеркнул где должно выстрелить.
С Sharp: т.е. в два хода? Такое решение у меня уже есть, но попроще: сначала хапается все, затем исправляются "ошибки", кроме тире еще допускается ставить многоточие в начале слова (правило не мое, русского языка :)
\b([a-zа-я]{1,2}) + // тут обычный пробел
([-…][a-zа-я]{1,2}) // тут неразрывный
сначала у строки заменить один пробел на два,а потом уже применять regex magic4x:
replace(' ', ' ') для всех пробелов, не знаю,нужна ли регулярка. Получается наложение вхождений,если пробел один и слева и справа нужное слово.
С Sharp: replace медленней и больше будет вхождений, чем "погрешностей" -- лучше устранить их, что и делается в моем последнем ответе. Я просто надеялся найти решение в один ход. Спасибо.
OVK2015: похоже, задачу вы решили, но мне оно не подходит. Суть моей идеи: замена последнего пробела, а у вас, как я понял, регулярка ищет задом наперед, в итоге она предлагает заменить лидирующий символ, а это совсем не то.
а у вас, как я понял, регулярка ищет задом наперед, в итоге она предлагает заменить лидирующий символ
Нет. Она просто смотрит чтобы перед группой из 1 или 2 символов был либо не печатный символ, либо начало текста, либо точка. А сразу за этим же набором из символов стоял либо не печатный символ, либо конец текста, либо точка.
OVK2015: как-то я не правильно выразился, конечно, она не ищет задом-наперед, но поскольку (?=...) не позволяет "сохранить" группу для последующей замены, а можно только первую с лидирующим пробелом, решение не совсем для меня ( Спасибо за попытку, много нового для себя открыл )
magic4x: Не за что.
Если я правильно понял, то чего вы хотите:
Из: Че ж ты раньше-то молчал
Должно получиться: Че_ж_ты_раньше-то молчал,
Т.е. вам не сами эти слова нужны, а позиции за ними? Там несколько по другому надо делать
OVK2015: да, нужен это чертов пробел "после" заменить на неразрывный, я вроде уже и так и это расписал, просто постановка задачи ограничивается ее пониманием и знанием области; я не знал, что можно найти "совпадение", но при этом не иметь возможности "захватить" группу для замены. Вот и вышло недоразумение.