Member 11276287 Ответов: 1

Как найти шаблоны во многих строках и заменить их ?


У меня есть много шаблонов, которые хотят найти совпадающие строки с этими шаблонами во многих входных строковых массивах и заменить их на "не" строку. например, если у нас есть:
str[0]={"this","is","a simple","text","for","example","!"};
str[1]={"Can","you","help me","please","?","thank","you","very much","."};
string[] patterns={"the","that","(eg width)","123",".","text","for example","help me","very much"};

Замена совпадающих паттернов в str[i] на "NON" - это результат желания:

str[0]={"this","is","a simple","NON","NON","NON","!"};
str[1]={"Can","you","NON","please","?","thank","you","NON"};

Как мне это сделать?

Что я уже пробовал:

поиск шаблонов во многих строковых массивах и их замена.

Philippe Mori

Почему некоторые строки в узорах выделены жирным шрифтом, а другие-нет? Я думал, что пункты, выделенные жирным шрифтом, были теми, которые действительно использовались, но, очевидно, это не так, поскольку "текст" не выделен жирным шрифтом.

Также неясно, как обрабатывать шаблоны с несколькими словами.

Вы должны сделать свой вопрос более ясным.

1 Ответов

Рейтинг:
4

Karthik_Mahalingam

попробовать это

static void Main(string[] args)
   {


       string[] myArray = { "Can", "you", "help me", "please", "?", "thank", "you", "very much", "." };
       ReplaceWithNON(myArray);


   }

   private static void ReplaceWithNON(string[] myArray)
   {
       string[] patterns = { "the", "that", "(eg width)", "123", ".", "text", "for example", "help me", "very much" };

       for (int i = 0; i < myArray.Length; i++)
       {
           if (patterns.Contains(myArray[i]))
               myArray[i] = "NON";
       }
   }


Member 11276287

спасибо Вам за ваше решение, но ваш код не работает корректно для некоторых массивов str, таких как str[0]!

Karthik_Mahalingam

Вы должны разделить "например" как "для", "пример" в массиве шаблонов

Member 11276287

Нет,я не могу их разделить. Я должен предположить массив str[i] как одну строку и найти совпадающие подстроки с массивом patterns, а затем заменить их на "NON" (в str[i])

Karthik_Mahalingam

попробовать это

static void Main (string[] args)
{

строка[] с myarray = { "это", "является", "простой", "текст", "для", "пример", "!" };

// string[] myArray = {"Can"," you"," help me"," please","?"," thank"," you"," very much","." };
ReplaceWithNON(myarray, к);


}

частных статических недействительным ReplaceWithNON(строка[] myarray, к)
{
string[] patterns = {"the", "that", "(например, width)", "123", ".", "текст", "например", "помогите мне", " очень много" };
List & lt;string & gt; temp = новый список & lt;string>();
foreach (string pattern in patterns)
{
темп.Добавить(рисунок);
temp. AddRange(pattern. Split(new char [] { '' }, StringSplitOptions.RemoveEmptyEntries));
}
ВАР allPatterns = темп.Различны().Список();


for (int i = 0; i < myArray.Длина; i++)
{
если (allPatterns.Содержит(myArray[i]))
myArray[i] = " NON";
}
}

Member 11276287

Спасибо, он работает правильно.

Karthik_Mahalingam

крутой,
:)

Member 11276287

Мне очень жаль, что я продолжаю комментировать. Не могли бы вы помочь мне отредактировать ваши коды ,чтобы решить следующий пример, пожалуйста?
если мы предположим:
строка[] с myarray ={ "как", "много", "есть", "для", "пример", "по","тестирование","ваш","решение","." };
с ваших кодов, выход:
myArray = {"как", "не", "есть", "НЕ", "НЕ", "НЕ", "тестирование", "ваше", "решение", " не" };
но желаемый результат таков:
myArray = {"How", "much", "is", "NON", "NON", "for", "testing", "your", "solution", " NON" };

Karthik_Mahalingam

но это нарушит парадигму для первого случая.

вы должны будете предоставить правильный тестовый случай как для входных данных, так и для будущих случаев, чтобы мы могли проанализировать и сделать алгоритм ... иначе это будет беспорядок..

Member 11276287

Моя проблема заключается в следующем: у нас есть строка, которая разбита на множество токенов(например, myArray).желаемая цель состоит в том, чтобы найти все специальные подстроки(например, паттерны)и заменить их на "не". каждая подстрока/паттерн имеют связанные токены, но они могут быть отдельными токенами в myArray, и порядок важен.Я не знаю, как решить эту проблему!

Karthik_Mahalingam

предоставьте некоторый пример входных данных и ожидаемый результат логически..

Member 11276287

логически?
string[] input0={"a", "bc", "de fg", "h", "i", "j", "i", "i j", "kl", "m", "nop", "q rs","tu", "v", "wxy z", " wz"};
string[] patterns={"a m", "bc", "de", "h i j", "k", "rs", "tu v", "z", " wz"};

ожидаемый результат:
input0={"а","нон","де-ФГ","номера","номера","номера","я","мой J","КЛ","м","НОП","М РС","номера","номера","wxy и Z"."Номера"};

Karthik_Mahalingam

ладно подожди
я все проанализирую и вернусь..

Member 11276287

Большое вам спасибо за ваше внимание и ваши усилия.

Karthik_Mahalingam

почему "ч","я","Джей преобразуется в "номера","номера","номера"
и следующее " Я " превращается в "я"
какая логика стоит за этим?

Member 11276287

нам разрешено объединять последовательные элементы входного массива для построения шаблона с использованием пространства. например
паттерны[3]= "h i j" =слияние (input0[3],"", input0[4],"", input0[5]). обратите внимание- - - - - > 3,4,5
но мы не позволяем разбивать паттерн (обратный для паттерна).таким образом, у нас нет паттернов[j]="i".
некоторые из правил таковы:
если input0[я]="ул."&амп; шаблоны[Дж]="улица" тогда input0[я]="не"
если input0[я]="str1 выглядит следующим образом"&амп;input0[я+1]="стр2" &амп; шаблоны[Дж]="строка str2 str1 выглядит следующим образом:" тогда input0[я]=input0[я+1]="не"
если input0[я]="str1 выглядит следующим образом"&амп;input0[я+1]="стр2"&амп;...&ампер;input0[я+н]="стрн" &амп; шаблоны[Дж]="str1 выглядит следующим образом стр2 ... стрн" тогда input0[я]=input0[я+1]=...=input0[я+н]="не"

если input0[я]="str1 выглядит следующим образом"&амп; input0[я+1] !="стр2"&амп; шаблоны[Дж]="строка str2 str1 выглядит следующим образом:" тогда input0[я]="str1 выглядит следующим образом"&амп; вход[я+1]="стр2"

Karthik_Mahalingam

static void Main (string[] args)
{

string[] input0 = { "a", "bc", "de fg", "h", "i", "j", "i", "i j", "kl", "m", "nop", "q rs"," tu", "v", "wxy z", " wz" };
ReplaceWithNON(input0);
}

частных статических недействительным ReplaceWithNON(строка[] myarray, к)
{
string[] myArray1 = myArray.Вызова метода toList().Метод toArray();
string[] patterns = { "a m", "bc", "de", "h i j", "k", "rs", "tu v", "z", " wz" };

foreach (строковый элемент в шаблонах)
{
string[] temp = item. Split(new char [] { '' }, StringSplitOptions.RemoveEmptyEntries);
var length = temp.Длина;
если (длина > 1)
{
for (int i = 0; i < myArray.Длина; i++)
{
строка = строка.Присоединиться(" ", с myarray.Пропустить(я).Взять(длина).Список());
if (a = = item)
{
для (Int J В = я; к &ЛТ; я + длина; J++в)
{
myArray1[j] = " NON";
}
перерыв;
}
}

}
for (int i = 0; i < myArray.Длина; i++)
если (паттерны.Содержит(myArray[i]))
myArray1[i] = " NON";

for (int i = 0; i < myArray1.Длина; i++)
myArray[i] = myArray1[i];



}

}

Karthik_Mahalingam

попробуйте использовать приведенный выше код

Member 11276287

ok.it работайте правильно.
Большое вам спасибо за ваши самоотверженные усилия, и я ценю ваше время. удачи!

Karthik_Mahalingam

крутой