Поиск замена в списке всего словосочетания (предложения)

xatabich10

Client
Регистрация
30.10.2017
Сообщения
17
Благодарностей
3
Баллы
3
Доброго времени суток.
Второй день мучаюсь ... Подскажите как реализовать следующее?

Составив список для публикации, в котором до 30 слов и словосочетаний.
Пример:
Мыло
Мыло для детей
Хозяйственные товары
Все для дома
Стол
Стол кухонный

Надо сделать поиск и замену в списке.
Пример:
Мыло на Мыльные принадлежности
Хозяйственные товары на Хоз товары
Стол на Стол верстак
Стол кухонный на Все для дома

Внимание! При этом, чтобы заменялось все словосочетание, а не первое слово при совпадении.
Я пробовал делать это на кирпичах но возникла проблема, так как на кирпичах при Замене менялось первое совпадение.
Пример:
Если нет в списке слова Мыло, а есть словосочетание Мыло для детей, то замена производится по сценарию: Мыльные принадлежности для детей.
Как сделать, чтобы в списке менялось точное словосочетание?
Спасибо заранее....

Screenshot_3.png
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
ты просто не правильно расставляешь приоритеты.
сначала нужно заменять более сложные конструкции, в которых есть вхождение мене сложных. Например "мыло" входит, скажем, в "антибактериальное мыло", а оно в свою очередь входит в "антибактериальное мыло для детей". Значит сначала заменяется "антибактериальное мыло для детей", затем "антибактериальное мыло", и напоследок самое просто "мыло".
 

xatabich10

Client
Регистрация
30.10.2017
Сообщения
17
Благодарностей
3
Баллы
3
ты просто не правильно расставляешь приоритеты.
сначала нужно заменять более сложные конструкции, в которых есть вхождение мене сложных. Например "мыло" входит, скажем, в "антибактериальное мыло", а оно в свою очередь входит в "антибактериальное мыло для детей". Значит сначала заменяется "антибактериальное мыло для детей", затем "антибактериальное мыло", и напоследок самое просто "мыло".
Возможно я плохо выстроил логику и двигаюсь не по тому сценарию) Но у меня получается так, что когда из Вами перечисленного в списке есть одно из словосочетаний: антибактериальное мыло, замена происходит только слова Мыло и получается в результате: Антибактериальное Мыльные принадлежности. И тут по мылу это условный пример. Проблема с заменой когда в списке одно слово, а не словосочетание.
 

xatabich10

Client
Регистрация
30.10.2017
Сообщения
17
Благодарностей
3
Баллы
3

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Внимание! При этом, чтобы заменялось все словосочетание, а не первое слово при совпадении.
Я пробовал делать это на кирпичах но возникла проблема, так как на кирпичах при Замене менялось первое совпадение.
Пример:
Если нет в списке слова Мыло, а есть словосочетание Мыло для детей, то замена производится по сценарию: Мыльные принадлежности для детей.
Как сделать, чтобы в списке менялось точное словосочетание?
Делать замену по регулярке. Например, (?<=^|\n)Мыло(?=\r|$) заменить на Мыльные принадлежности

Screenshot_3.png
 
  • Спасибо
Реакции: ТРОН

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Думал может кто C# даст готовый)
C#:
string text = project.Variables["text"].Value;
string[] textReplace =
{
    "Что заменять|На что заменять",
    "Мыло|Мыльные принадлежности",
    "Хозяйственные товары|Хоз товары",
    "Стол|Стол верстак",
    "Стол кухонный|Все для дома"
};

foreach (string str in textReplace)
    text = Regex.Replace(text, "(?<=^|\n)" + str.Split('|')[0] + "(?=\r|$)", str.Split('|')[1]);
return text;
 

xatabich10

Client
Регистрация
30.10.2017
Сообщения
17
Благодарностей
3
Баллы
3
C#:
string text = project.Variables["text"].Value;
string[] textReplace =
{
    "Что заменять|На что заменять",
    "Мыло|Мыльные принадлежности",
    "Хозяйственные товары|Хоз товары",
    "Стол|Стол верстак",
    "Стол кухонный|Все для дома"
};

foreach (string str in textReplace)
    text = Regex.Replace(text, "(?<=^|\n)" + str.Split('|')[0] + "(?=\r|$)", str.Split('|')[1]);
return text;
Маэстро Вы великолепны... Как Вы мне помогли с C# он работает как часы) те что из Швейцарии.
Все получилось как я и хотел... СПАСИБО! Лайк, подписка... с меня все как обычно.
 
  • Спасибо
Реакции: Dimionix

Ara

Client
Регистрация
14.02.2018
Сообщения
192
Благодарностей
14
Баллы
18
В этот код вставить текст, с переменной
Пример:
Переменная [Замена] в ней:

"Что заменять|На что заменять",
"Мыло|Мыльные принадлежности",
"Хозяйственные товары|Хоз товары",
"Стол|Стол верстак",
"Стол кухонный|Все для дома"



////////////////////

string text = project.Variables["text"].Value;
string[] textReplace =
{
[Замена]

};

foreach (string str in textReplace)
text = Regex.Replace(text, "(?<=^|\n)" + str.Split('|')[0] + "(?=\r|$)", str.Split('|')[1]);
return text;


////////////////////


Можно как то так сделать.
 
  • Спасибо
Реакции: bizzon

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)