Что нового

[RegExp] Как в SciTE удалить все апострофы, стоящие рядом с русской буквой?

seriych

Новичок
Сообщения
18
Репутация
0
Конвертирую словари, возникла такая проблема:
Как удалить все апострофы, стоящие рядом с любой русской буквой? То есть если непосредственно справа или(и) слева от апострофа есть русская буква, то удалить этот апостроф. С апострофами, рядом с которыми нет русских букв, ничего не делать. Например, в следующей строке удалить только выделенные красным:
[']'qqq'ййй'qqq 'qqq 'йй'й ' ййй''''
Желательно, чтобы просто через Search->Replace непосредственно в SciTE. Можно в два захода- для букв справа и слева. Найти, то я понимаю как, а вот как удалить только апостроф?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Установить галку "Regular Expresion"
Find What: '?\([а-яА-Я]\)'?
Replace with: \1


Добавлено:
Сообщение автоматически объединено:

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


Добавлено:
Сообщение автоматически объединено:

Какая то обрезанная версия регулярок в SciTe... нельзя сделать что бы символ попадался от 0 до 2 раз например таким выражением {0,2}
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
seriych [?]
Желательно, чтобы просто через Search->Replace непосредственно в SciTE
IMHO в SciTE это будет проблематично, потому что как правильно заметил Medic84
Какая то обрезанная версия регулярок в SciTe
Вот вариант для скрипта (если вдруг передумаете) :smile:
Код:
$sText = "'qqq'ййй'qqq 'qqq 'йй'й ' ййй''''"
ConsoleWrite(StringRegExpReplace($sText, "'(?=[а-яА-ЯЁё])|(?<=[а-яА-ЯЁё])'", "$1") & @CR)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Garrett,
Вы буквы ёЁ не учли.
 
Автор
S

seriych

Новичок
Сообщения
18
Репутация
0
Medic84 сказал(а):
Исправил регулярку. Сначала не заметил что все не нужно удалять
Странно, сделал как раз, как было сначала.
Правда не без проблем, некоторые лишние апострофы непонятно почему всё равно удаляет. Или символы, типа à, тоже входят в промежуток [а-яА-Я]?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
seriych [?]
Желательно, чтобы просто через Search->Replace непосредственно в SciTE. Можно в два захода- для букв справа и слева
Первый заход...
Поиск:
Код:
'+([абвгдеёжзийклмнопрстуфхцчшщыьъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ])
Замена:
Код:
\1

Второй заход...
Код:
([абвгдеёжзийклмнопрстуфхцчшщыьъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ])'+
Замена:
Код:
\1
 
Автор
S

seriych

Новичок
Сообщения
18
Репутация
0
CreatoR
А вот это работает там где надо, а там где не надо, не работает. Только слэши нужны:
'+\([абвгдеёжзийклмнопрстуфхцчшщыьъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ]\)
Но не совсем понятно, чем это отличается от '\([а-яА-Я]\), который неправильно срабатывал в строках с символами типа à. Файл в UTF-8- может в этом дело, но там вроде тоже русские, кроме ёЁ все подряд идут.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
seriych [?]
Только слэши нужны
У меня без них работает.

чем это отличается от '\([а-яА-Я]\), который неправильно срабатывал в строках с символами типа à
«а-я» это диапазон символов, видимо проверяется по числовому Dec-значению символа (Asc('а'), т.е 127 и выше).
Символ «à» это символ из таблицы юникода (AscW('à') = 224), вот он и попал в этот диапазон.

В SciTE эти диапазоны видимо не поддерживаются, поэтому приходится указывать все символы.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
CreatoR [?]
Не обязательно делать 2 захода.
Как ни странно, в регулярке поддерживается символ вопросительного знака (?) - который, как известно, означает либо отсутствие символа либо присутствие 1 такого. Т.е. можно использовать

Код:
'?\([абвгдеёжзийклмнопрстуфхцчшщыьъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ]\)'?

P.S. Интересно - почему этого нет в офф. документации


Добавлено:
Сообщение автоматически объединено:

CreatoR [?]
У меня без них работает.
Цитата с русского сайта SciTe:
Синтаксис регулярных выражений зависит от параметра find.replace.regexp.posix.
Если он установлен в 0, используется старый Unix-овый синтаксис, где \( и \) обозначают границы подвыражений (подшаблонов), а ( и ) - сами себя.
Если же он установлен в 1, то используется общепринятый синтаксис, где ( и ) обозначают границы подвыражений (подшаблонов), а \( и \), соответственно, круглые скобки.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
Интересно, но у меня ни один из вариантов не работает. SciTE пишет что такой текст не найден, хотя галочка "RegExp" стоит.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Garrett
Как то странно даже. А вообще какая нибудь регулярка работает?
Например: .* (весь текст) - работает?
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
seriych
Очень часто использую RegExp не только для теста регулярных выражений, но и просто для обработки текста, так как поддерживается синтаксис используемый в скриптах. Можно кинуть файл в окно, а можно скопировать текст из редактора и обратно. Горячие клавиши поддерживаются, так что получается очень быстро.
Хотя есть ограничение по размеру файла, элемент Edit имеет ограничение по количеству символов. Пакетную замену лучше сделать например с помощью TextReplace
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Medic84 [?]
Не обязательно делать 2 захода.
Да, я первый раз почти так и пробовал (правда у меня не работает с «?», а вот с «*» работает), но делал это с удалением символа который не преследуется апострофом, и думал что таким образом будет удалён и сам символ.
 
Верх