Другие языки программирования и технологии

C# Парсинг слов из строки без регистра

Всем привет!
Нужно, чтобы из строки Regex создал коллекцию слов (то есть вытащил каждое слово и поместил его в отдельную ячейку контейнера MatchCollection методом Matches). Это я сделал. Нужно чтобы вытаскивание слов было таким, чтобы все слова в контейнер приходили с маленькой буквы, все буквы в слове маленькие.
"Всем привет всем"
А то получается, что одно и то же слово всем считается как 2 разных, так как один раз с маленькой написано, второй раз с большой. Как показать, чтобы парсинг производился без учёта регистра.
RegexOptions.IgnoreCase не помогает, так как он делает приём как больших так и маленьких букв, не изменяя их, а мне надо чтобы при вытаскивании из строки все буквы в слове стали маленькими.
Спасибо за ответы!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace Телефоны
{
class Program
{
static void Main(string[] args)
{
List Words = new List();
List Repeat = new List();
Console.WriteLine("Введите текст");
string str = Console.ReadLine();
Regex pat = new Regex(@"([a-zA-ZА-Яа-я]) +");
MatchCollection matches = pat.Matches(str);
foreach (Match m in matches)
{
Words.Add(Convert.ToString(m.Groups[0]));
}
foreach (string s in Words)
{
int t = 0;
foreach (string e in Repeat)
{
if (s == e)
t++;
}
if (t > 0)
continue;
int sum = 0;
foreach (string ss in Words)
{
if (s == ss)
sum++;
}
Console.WriteLine("Слово {0} в тексте встречается {1} раз", s, sum);
Repeat.Add(s);
}
}
}
}
i вынести за квадратные скобки в конце
ВВ
Валентин Валевич
81 601
Лучший ответ
Ернар Жумадилов Так?
Regex pat = new Regex(@"([a-zA-ZА-Яа-я] i)+");
Не получается. Он думает, что это буква и не выдаёт ни одного слова.
Regex pat = new Regex(@"([a-zA-ZА-Яа-я] \i)+");
С экраном ошибку выдаёт, не может понять что это.
Не совсем понятно объясняешь. Какой нужен конечный результат?
Ежели тебе нужны слова токмо с маленькой буквы - удали А-Я в регулярном выражении. Модификаторы ставятся пред символом и действуют токмо для него (ежели у тебя списки - ставь их в круглые скобки и пред скобкой ставь модификатор). Свойство IgnoreCase действует на все.
Ернар Жумадилов Конечный результат: сколько раз встречается каждое слово в строке не зависимо от регистров букв в слове.
Например:
Для строки "Привет всей комиссии! А также привет всей аудитории".
Программа выведет
Слово Привет в тексте встречается 1 раз
Слово всей в тексте встречается 2 раз
Слово комиссии в тексте встречается 1 раз
Слово А в тексте встречается 1 раз
Слово также в тексте встречается 1 раз
Слово привет в тексте встречается 1 раз
Слово аудитории в тексте встречается 1 раз

А должно быть:
Слово привет в тексте встречается 2 раз
Слово всей в тексте встречается 2 раз
Слово комиссии в тексте встречается 1 раз
Слово А в тексте встречается 1 раз
Слово также в тексте встречается 1 раз
Слово аудитории в тексте встречается 1 раз
C# Парсинг слов из строки без регистра
Роман Protocol Гуру (3561), Вопрос решён 2 дня назад
Всем привет!
Нужно, чтобы из строки Regex создал коллекцию слов (то есть вытащил каждое слово и поместил его в отдельную ячейку контейнера MatchCollection методом Matches). Это я сделал. Нужно чтобы вытаскивание слов было таким, чтобы все слова в контейнер приходили с маленькой буквы, все буквы в слове маленькие.
"Всем привет всем"
А то получается, что одно и то же слово всем считается как 2 разных, так как один раз с маленькой написано, второй раз с большой. Как показать, чтобы парсинг производился без учёта регистра.
RegexOptions.IgnoreCase не помогает, так как он делает приём как больших так и маленьких букв, не изменяя их, а мне надо чтобы при вытаскивании из строки все буквы в слове стали маленькими.
Спасибо за ответы!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace Телефоны
{
class Program
{
static void Main(string[] args)
{
List Words = new List();
List Repeat = new List();
Console.WriteLine("Введите текст");
string str = Console.ReadLine();
Regex pat = new Regex(@"([a-zA-ZА-Яа-я]) +");
MatchCollection matches = pat.Matches(str);
foreach (Match m in matches)
{
Words.Add(Convert.ToString(m.Groups[0]));
}
foreach (string s in Words)
{
int t = 0;
foreach (string e in Repeat)
{
if (s == e)
t++;
}
if (t > 0)
continue;
int sum = 0;
foreach (string ss in Words)
{
if (s == ss)
sum++;
}
Console.WriteLine("Слово {0} в тексте встречается {1} раз", s, sum);
Repeat.Add(s);
}
}
}
}
Дополнен 3 дня назад
Вот, нашёл модификатор i - не учитывать регистр, куда его вставить не знаю.

Дополнен 3 дня назад
И поможет ли i?
Нравится Подписаться Ответить
ЛУЧШИЙ ОТВЕТ
Николай Веселуха 3 дня назад
Высший разум (193275)
i вынести за квадратные скобки в конце
3 Нравится 10 Комментариев Пожаловаться
2 ОТВЕТА
Яспис Смарагдович 3 дня назад
Мудрец (11060)
Не совсем понятно объясняешь. Какой нужен конечный результат?
Ежели тебе нужны слова токмо с маленькой буквы - удали А-Я в регулярном выражении. Модификаторы ставятся пред символом и действуют токмо для него (ежели у тебя списки - ставь их в круглые скобки и пред скобкой ставь модификатор). Свойство IgnoreCase действует на все.
Нравится 3 Комментария Пожаловаться

Эмиль Ивочкин 2 дня назад
Знаток (393)
Есть свойство у строк, позволяющее менять регистр, просто примени к строке String.ToLower
Нравится Комментировать Пожаловаться
Есть свойство у строк, позволяющее менять регистр, просто примени к строке String.ToLower