Поиск-замена нескольких вариантов искомых слов

  • Автор темы Автор темы serg32
  • Дата начала Дата начала

serg32

Client
Регистрация
27.02.2015
Сообщения
545
Реакции
15
Баллы
18
Здравствуйте!
Может кто подсказать как реализовать следующее?
Есть несколько вариантов написания цифр словами, к сожалению бывает так что одна и та же цифра ( Например : 18, может быть написана в коде несколькими вариантами текста - восeMHадцаTь, BoceMнадцаTь, BoceмнадцаTb и т.к. далее. Нужно сделать замену всех этих вариантов написания на цифру 18. Пытался реализовать это следующим образом - через экшен "обработка текста" - поиск-замена брался один вариант написания и заменялся на цифру 18, в итоге таких экшенов получается большое количество, хотелось бы узнать как можно сделать поиск по нескольким вариантам написания, что бы они все заменялись на нужную цифру.
 
Проще заказать снипет на сишарпе который будет делать это в один шаг и ложить готовый результат в переменную.

Обратись к LexxWork или к Radzhab
 
Уххх...Страшная статейка)
 
Здравствуйте!
Может кто подсказать как реализовать следующее?
Есть несколько вариантов написания цифр словами, к сожалению бывает так что одна и та же цифра ( Например : 18, может быть написана в коде несколькими вариантами текста - восeMHадцаTь, BoceMнадцаTь, BoceмнадцаTb и т.к. далее. Нужно сделать замену всех этих вариантов написания на цифру 18. Пытался реализовать это следующим образом - через экшен "обработка текста" - поиск-замена брался один вариант написания и заменялся на цифру 18, в итоге таких экшенов получается большое количество, хотелось бы узнать как можно сделать поиск по нескольким вариантам написания, что бы они все заменялись на нужную цифру.
Как вариант привести исходный тект к одному регистру - действие Обработка текста>ToUpper ил ToLower, и потом выполнить замену.
 
Как вариант привести исходный тект к одному регистру - действие Обработка текста>ToUpper ил ToLower, и потом выполнить замену.
Прикол в том что, слова "восeMHадцаTь, BoceMнадцаTь, BoceмнадцаTb" serg32 написал "килиллицолатиницей", если так и задумано, то Ваш вариант ему не подойдет. Если же только меняется регистр, то да. А можно проще:
Экшен Обработка текста > Замена
Что заменить (Regex): (?i)восемнадцать
На что заменить: 18
Что заменять: Все
(?i) перед регулярным выражением - это "не учитывать регистр".
 
  • Оценить
Реакции: Hannes
var cheto = "BoceмнадцаTb";
var nechto = "З3,аa,АA,ВB,сc,СC,еe,ЕE,НH,кk,КK,МM,оo,ОO,рp,РP,ТT,хx,ХX,уy,ьb".Split(',').Select(p=>new {Key=p[1], Value=p[0]}).ToDictionary(key=>key.Key, value=>value.Value);
var nechto2 = "0.ноль,1.один,2.два,3.три,4.четыре,5.пять,6.шесть,7.семь,8.восемь,9.девять,10.десять,11.одиннадцать,12.двенадцать,13.тринадцать,14.четырнадцать,15.пятнадцать,16.шестнадцать,17.семнадцать,18.восемнадцать,19.девятнадцать,20.двадцать,30.тридцать,40.сорок,50.пятьдесят,60.шестьдесят,70.семьдесят,80.восемдесят,90.девяносто,100.сто,200.двести,300.триста,400.четыреста,500.пятсот,600.шестьсот,700.семьсот,800.восемьсот,900.девятьсот,1000.тысяча".Split(',').Select(p=>new {Key=p.Split('.')[1], Value=p.Split('.')[0]}).ToDictionary(key=>key.Key, value=>value.Value);
var norm = new StringBuilder();
cheto.ToList().ForEach(fu=>norm.Append((nechto.Keys.Contains(fu))?nechto[fu]:fu));
var normnorm = norm.ToString().ToLower();
if(nechto2.Keys.Contains(normnorm))
return nechto2[normnorm];
 
Последнее редактирование:
  • Оценить
Реакции: serg32 и sof
Так и есть , текст написан на половину кириллицей на половину латиницей. Поэтому и получается что на одну цифру может быть несколько вариантов написания подобным текстом.
 

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