Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Замена коротких слов на другое словосочетание с помощью регулярного выражения. / 11 сообщений из 11, страница 1 из 1
28.04.2015, 15:15
    #38947404
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
Здравствуйте!
Помогите, пожалуйста, решить следующую задачу :
нужно заменить все короткие слова в текстовом файле на слово US. Есть такой код :
Код: c#
1.
2.
3.
4.
5.
6.
7.
            string text = null;
            text = File.ReadAllText(pathNewFile, Encoding.Default);        
            string pattern = "^[а-яА-Я]${1,2}";
            string replacement = "US";
            Regex rgx = new Regex(pattern);
            string result = rgx.Replace(text, replacement);
            tbxViewEndFile.Text = result;


Не работает регулярное выражение! Что здесь неправильно? Объясните пожалуйста!
...
Рейтинг: 0 / 0
28.04.2015, 15:22
    #38947413
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
видимо, потому, что "{1,2}" относится только к литералу "$"
...
Рейтинг: 0 / 0
28.04.2015, 15:48
    #38947447
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
Shocker.Proвидимо, потому, что "{1,2}" относится только к литералу "$"
Пробовал ещё варианты :
Код: c#
1.
string pattern = "^([а-яА-Я]{1,2})$";


или так :
Код: c#
1.
string pattern = "^[а-яА-Я]{1,2}$";



Не работает! Как будет правильно?
...
Рейтинг: 0 / 0
28.04.2015, 16:02
    #38947471
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
ermanвсе короткие слова в текстовом файле на слово US
Что есть слово? Б1 - это слово? А Орлов-Чесменский?

Без проверки: pattern = @"\w{1,2}". Вместо \w, если нужны только буквы, можно [а-яА-Я]
...
Рейтинг: 0 / 0
28.04.2015, 16:03
    #38947473
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
erman,
Покажи несколько строк из файла.
...
Рейтинг: 0 / 0
28.04.2015, 16:30
    #38947521
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
Arm79ermanвсе короткие слова в текстовом файле на слово US
Что есть слово? Б1 - это слово? А Орлов-Чесменский?

Без проверки: pattern = @"\w{1,2}". Вместо \w, если нужны только буквы, можно [а-яА-Я]

Код: c#
1.
2.
            var reg = Regex.Replace("У попа была собака и он ее убил", @"(?<!\w)[а-я]{1,2}(?=\s)", "US", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
            Console.WriteLine(reg);
...
Рейтинг: 0 / 0
28.04.2015, 16:41
    #38947553
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
Arm79Arm79пропущено...

Что есть слово? Б1 - это слово? А Орлов-Чесменский?

Без проверки: pattern = @"\w{1,2}". Вместо \w, если нужны только буквы, можно [а-яА-Я]

Код: c#
1.
2.
            var reg = Regex.Replace("У попа была собака и он ее убил", @"(?<!\w)[а-я]{1,2}(?=\s)", "US", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
            Console.WriteLine(reg);



Заработало, но ещё бы разобрать это выражение. Не совсем понятно, например, что значит эта часть :
Код: c#
1.
(?<!\w)


И эта :
Код: c#
1.
(?=\s)
...
Рейтинг: 0 / 0
28.04.2015, 16:51
    #38947571
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
erman
Код: c#
1.
(?<!\w)


Перед словом не должно быть не одного значимого символа (грубо говоря, начало слова)

erman
Код: c#
1.
(?=\s)


после слова должен быть любой символ из числа пробельных (пробел, табуляция, т.п.)

Кстати, небольшой косяк. Забыл, что короткое слово может быть и последним
(?<!\w)[А-Я]{1,2}((?=\s)|(?=$))
...
Рейтинг: 0 / 0
28.04.2015, 17:31
    #38947643
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
Arm79erman
Код: c#
1.
(?<!\w)


Перед словом не должно быть не одного значимого символа (грубо говоря, начало слова)

erman
Код: c#
1.
(?=\s)


после слова должен быть любой символ из числа пробельных (пробел, табуляция, т.п.)

Кстати, небольшой косяк. Забыл, что короткое слово может быть и последним
(?<!\w)[А-Я]{1,2}((?=\s)|(?=$))

Спасибо за помощь! Может посоветуете какую-то книгу или ресурсы, где подробно описываются регулярные выражения?
...
Рейтинг: 0 / 0
28.04.2015, 17:33
    #38947647
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
ermanСпасибо за помощь! Может посоветуете какую-то книгу или ресурсы, где подробно описываются регулярные выражения?
Краткий справочник
Книга
...
Рейтинг: 0 / 0
28.04.2015, 19:02
    #38947768
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена коротких слов на другое словосочетание с помощью регулярного выражения.
erman, самая простая регулярка:
Код: c#
1.
@"\b[а-я]{1,2}\b"

\b означает границу слова.

erman, в твоей самой первой регулярке символ ^ означает начало строки. Соответственно, будет матчиться только первое слово.

Полезные ссылки:
Википедия - на мой взгляд, внятно и лаконично.
Тут немного теории и практических примеров.
И, как и Arm79, я советую книгу Фридла и msdn.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Замена коротких слов на другое словосочетание с помощью регулярного выражения. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]