Регулярные выражения C# - литералы
появился такой вопрос. Это лабораторная работа, в ней есть два тестовых файла в котором 1 файл заменяет данные во втором. Нужно сделать похожую программу, только с таким условием: В тексте программы выделить литералы языка программирования. Разбить литералы на группы: целочисленные, вещественные, символьные и строковые. Указать для каждой группы литералов список литералов и их количество в группе. Не пойму как сделать, был бы очень благодарен если бы кто-то написал правильный код, для наглядного примера. Спасибо! Вот пример кода:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Resources;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace ReservedWords
{
class Program
{
static void Main(string[] args)
{
string[] reservedWordsArray = File.ReadAllLines("reservedWords.txt");
Dictionary<string, int> reservedWords = Enumerable.Range(0, reservedWordsArray.Length).ToDictionary(x => reservedWordsArray[x]);
string program = File.ReadAllText("Program.cs");
foreach(string word in reservedWords.Keys)
{
program = Regex.Replace(program, $"(^|\\W)({word})($|\\W)", $"$1{word.ToUpper()}_{reservedWords[word]}$3");
}
File.WriteAllText("Program.txt", program.ToString());
}
}
}
Ответы (1 шт):
Тут код на заказ не пишут, сайтом ошиблись. Но помочь сделать я могу, подсказать правильное решение.
Итак, мы имеем 4 вида литералов:
- целочисленные (
10,0xFF,-1829,0b100001) - вещественные (
0.5,1.8e3,-1.8e-2f) - символьные (
'Q','\x0032',(char)32,'\u0032') - строковые (
"Q","10","0.5","test","Компания \"Рог\"","Файл 'kek.txt'")
Замечание: на самом деле со строковыми литералами всё не так просто. Например, внутри строкового литерала с регулярным выражением может находиться вообще всё что угодно. Я уже молчу про $"text {1 + 8} text", что по сути литералом и не является.
Для поиска совпадений и их вхождения в тексте используется регулярные выражения, класс Regex. Регулярки без труда можно найти в интернете, если самому не получается написать.
Так как эта лаба, то, возможно, вам и не придётся так сильно заморачиваться с обработкой всех случаев, что я привёл.
Для простоты:
- целочисленные - просто числа
- вещественные - числа с точной
- символьные - в одинарных кавычках
- строковые - в двойных кавычках
Находим каждый тип и сохраняем в массив, чтобы потом их вывести и подсчитать количество. Лучше собирать сразу объекты результата поиска регуляркой - Match.
Затем открываем файл и заменяем найденные литералы из файла по результатам матчей. Сохраняем файл. Вот и всё, осталось вывести массивы с ранее найденными совпадениями и их количество.