Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C# Возможно ли ускорить String.Split? https://www.cyberforum.ru/ csharp-net/ thread1415722.html
Добрый день! Нужно разделять строки на слова. Разделители: пробел, точка, запятая. Стандартный Split работает довольно медленно, возможно ли его ускорить? Тестовый код: namespace...
C# Получение песен из контакта
Хочется получить список песен из ВК. Получить их колличество проблем не вызывает, а вот вывести их не могу, не пойму как это сделать using System; using System.Collections.Generic; using...
Портирование класса RSA для RDP с Java на C# C#
Прошу помочь в портировании имплиментации RSA шифрования для протокола RDP с Java на C#. Класс: https://msdn.microsoft.com/en-us/library/cc240810.aspx?f=255&MSPPError=-2147217396 Проблема в...
C# Построения электрических схем и последующее получение информации с построенной схемы Добрый день! Какие есть возможности в C# и .NET для построения электрических схем и последующего получения информации с построенной схемы? https://www.cyberforum.ru/ csharp-net/ thread1415538.html
C# Ожидание task - в чем ошибка https://www.cyberforum.ru/ csharp-net/ thread1415455.html
Добрый день! Такой код отрабатывает моментально. Хотя по логике на каждый элемент массива должно тратиться 1000 мс. То есть не работает ожидание выполнения всех тасков. В чем ошибка? ...
Превращение ссылки на переменную в полноценную копию C#
Здравствуйте! Извините за немного непонятный заголовок темы, терминологию в конкретно этой теме я не очень хорошо знаю. Есть класс, допустим Class1. В нем есть переменная Color класса...
Как передать текст в стороннее приложение без установки на него фокуса? C#
Есть форма на ней баттон и текстбокс, как передать через кнопку то что я написал в текстбоксе например в блокнот или еще куда нибудь без фокуса?
C# Написать свой кэширующий dns сервер нужно написать свой кэширующий dns сервер. он будет слушать 53 порт, получать рекурсивный запрос, выполнять его, а когда получит ответ, разберет его пакет, извлечет всю (!) информацию (все ресурсные... https://www.cyberforum.ru/ csharp-net/ thread1415355.html
C# Serialize: построение сложного XML (скрипт интегрирован в SSIS) https://www.cyberforum.ru/ csharp-net/ thread1415078.html
Добрый день, коллеги. Подскажите, как с помощью шарпа построить сложную XML (с несколькими уровнями вложенности) с помощью serialize. Кроме того хотелось бы понять, можно ли именовать теги...
C# Написание драйвера для ТВ-тюнера, с чего начать? Есть девайс, среда разработки C#, а как дальше быть? https://www.cyberforum.ru/ csharp-net/ thread1414991.html
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 57
0

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

08.04.2015, 01:38. Показов 851. Ответов 2
Метки (Все метки)

Есть Паттерн:
C
1
private static string AdjectivePattern = "(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)?";
Есть строковая переменная rv, которая содержит кусок слова, к примеру там лежит "ютнее".

В процессе выполняется следующий код:
C#
1
2
rgx = new Regex(AdjectivePattern);
temp = rgx.Replace(rv, "", 1);
Если я правильно понимаю, окончание "ее" должно удалиться из rv, соответственно, в temp должно лежать "ютн", однако, там лежит "ютнее".

Прошу подсказать в чем дело, заранее благодарен.

Если совсем надо, весь код:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
 
namespace trymatrixes
{
    class Stammer
    {
        private static string PerfectiveGerundPattern = "((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=ая)(в|вши|вшись)))$";
        private static string ReflexivePattern = "(с[яь])?";
        private static string AdjectivePattern = "(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)?";
        private static string ParticiplePattern = "((ивш|ывш|ующ)|((?<=ая)(ем|нн|вш|ющ|щ))$";
        private static string VerbPattern = "((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))$";
        private static string NounPattern = "(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|иям|ям|ием|ем|ам|ом|о|у|ах|иях|ях|ы|ь|ию|ью|ю|ия|ья|я)$";
        private static string RvrePattern = "^(.*?[аеиоуыэюя])(.*)$";
        private static string DerivationalPattern = ".*[^аеиоуыэюя]+[аеиоуыэюя].*ость?$";
        private static string DerPattern = "ость?$";
        private static string SuperlativePattern = "(ейше|ейш)$";
        private static string IPattern = "и$";
        private static string PPattern = "ь$";
        private static string NNPattern = "нн$";
 
        public string stem(string word)
        {
            word = word.ToLower();
            word = word.Replace('ё','е');
            Match m = Regex.Match(word, RvrePattern);
            if (m.Success)
            { 
                String pre = m.Groups[1].Value;
                String rv = m.Groups[2].Value;
                Regex rgx = new Regex(PerfectiveGerundPattern);
                string temp = rgx.Replace(rv, "", 1);
                if (temp.Equals(rv))
                {
                    rgx = new Regex(ReflexivePattern);
                    rv = rgx.Replace(rv, "", 1);
                    rgx = new Regex(AdjectivePattern);
                    temp = rgx.Replace(rv, "", 1);
                    if (!temp.Equals(rv))
                    {
                        rv = temp;
                        rgx = new Regex(ParticiplePattern);
                        rv = rgx.Replace(rv, "", 1);
                    }
                    else
                    {
                        rgx = new Regex(VerbPattern);
                        temp = rgx.Replace(rv, "", 1);
                        if (temp.Equals(rv))
                        {
                            rgx = new Regex(NounPattern);
                            rv = rgx.Replace(rv, "", 1);
                        }
                        else
                        {
                            rv = temp;
                        }
                    }
                }
                else
                {
                    rv = temp;
                }
                rgx = new Regex(IPattern);
                rv = rgx.Replace(rv, "", 1);
 
                if (Regex.Match(rv, DerivationalPattern).Success)
                {
                    rgx = new Regex(DerPattern);
                    rv = rgx.Replace(rv, "", 1);
                }
 
                rgx = new Regex(PPattern);
                temp = rgx.Replace(rv, "", 1);
                if (temp.Equals(rv))
                {
                    rgx = new Regex(SuperlativePattern);
                    rv = rgx.Replace(rv, "", 1);
                    rgx = new Regex(NNPattern);
                    rv = rgx.Replace(rv, "н", 1);
                }
                else
                {
                    rv = temp;
                }
                word = pre + rv;
 
            }
            return word;
        }
    }
}


Добавлено через 26 минут
C#
1
Match a = Regex.Match(temp, AdjectivePattern);
a.Success выдает true, то есть косяк именно в реплейсе по идее.

Вернуться к обсуждению:
Работа с регулярными выражениями - проверка окончаний слов
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2015, 01:38
Готовые ответы и решения:

Проверка email на валидность регулярными выражениями
Есть задача: проверить вводимый email на валидность. Можно сделать это ручками, а можно через...

Описать множества слов, задаваемые регулярными выражениями
Опишите множества слов, задаваемыми следующими регулярными выражениями а(а+b)*a Заранее...

Работа с регулярными выражениями
Привет всем. Имеются куча сотен ссылок с таким шаблоном ...

Работа с регулярными выражениями для арифметических выражений
Вот задание: Дана строка, содержащая текст и арифметические выражения вида a ® b, где ® — один из...

__________________
2
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.