Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Роман Protocol Мыслитель (8562), закрыт 6 лет назад
Всем привет!
Нужно, чтобы из строки 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);
}
}
}
}
Дополнен 6 лет назад
Вот, нашёл модификатор i - не учитывать регистр, куда его вставить не знаю.
Дополнен 6 лет назад
И поможет ли i?
Лучший ответ
Николай Веселуха Высший разум (360718) 6 лет назад
i вынести за квадратные скобки в конце
Роман ProtocolМыслитель (8562) 6 лет назад
Так?
Regex pat = new Regex(@"([a-zA-ZА-Яа-я] i)+");
Не получается. Он думает, что это буква и не выдаёт ни одного слова.
Regex pat = new Regex(@"([a-zA-ZА-Яа-я] \i)+");
С экраном ошибку выдаёт, не может понять что это.
Николай Веселуха Высший разум (360718) Не очень понятна цель вашего задания, но попробуйте так... Console.Write("Введите текст: "); var line = Console.ReadLine(); var pattern = new Regex(@"([a-zA-Zа-яА-Я]) +"); var matches = pattern.Matches(line); var words = new List(); foreach (var matche in matches) words.Add(matche.ToString().ToLowerInvariant()); foreach (var word in words) Console.WriteLine(word);
Остальные ответы
Eggist Egg Просветленный (23119) 6 лет назад
Не совсем понятно объясняешь. Какой нужен конечный результат?
Ежели тебе нужны слова токмо с маленькой буквы - удали А-Я в регулярном выражении. Модификаторы ставятся пред символом и действуют токмо для него (ежели у тебя списки - ставь их в круглые скобки и пред скобкой ставь модификатор). Свойство IgnoreCase действует на все.
Роман ProtocolМыслитель (8562) 6 лет назад
Конечный результат: сколько раз встречается каждое слово в строке не зависимо от регистров букв в слове.
Например:
Для строки "Привет всей комиссии! А также привет всей аудитории".
Программа выведет
Слово Привет в тексте встречается 1 раз
Слово всей в тексте встречается 2 раз
Слово комиссии в тексте встречается 1 раз
Слово А в тексте встречается 1 раз
Слово также в тексте встречается 1 раз
Слово привет в тексте встречается 1 раз
Слово аудитории в тексте встречается 1 раз

А должно быть:
Слово привет в тексте встречается 2 раз
Слово всей в тексте встречается 2 раз
Слово комиссии в тексте встречается 1 раз
Слово А в тексте встречается 1 раз
Слово также в тексте встречается 1 раз
Слово аудитории в тексте встречается 1 раз
Роман Protocol Мыслитель (8562) Правильнее должно быть: Слово привет в тексте встречается 2 раз Слово всей в тексте встречается 2 раз Слово комиссии в тексте встречается 1 раз Слово а в тексте встречается 1 раз Слово также в тексте встречается 1 раз Слово аудитории в тексте встречается 1 раз
Эмиль Ивочкин Знаток (499) 6 лет назад
Есть свойство у строк, позволяющее менять регистр, просто примени к строке String.ToLower
Весна Мастер (1314) 6 лет назад
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
Нравится Комментировать Пожаловаться
Похожие вопросы