В столбце 5.1 хочу заменить последние символы (_\d{2}) на пустой символ (" "), если перед ними не идет _сырный_и_для_гриля. Для этого использую функцию:
let fx=(txt as text, regex as text)=> Web.Page( "<script> var x = '" & txt & "'; var pattern = /" & regex & "/gi; var result = x.replace(pattern,''); document.write(result); </script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}
in fx
Я уверена, что ошибка именно в синтаксисе регулярного выражения, потому что без ретроспективной проверки (?<!_сырный_и_для_гриля), функция выдает результат.
Светлана Клешнева, JavaScript вообще не знаю. Но совет: 2 дня назад помогал ускорить обработку данных для PBI. С регулярками (получение даты из текста) обновление более 5 минут. С самописной функцией на M - 10 сек. Так что нафиг эти регулярки
Ан нет. Сделала проверку регулярки на сайте jsbin. Регулярка работает. Тогда совсем не понимаю ошибку (см Снимок1.JPG). Подскажите, плиз! Целый день мучаюсь.
Светлана Клешнева, не слушаете Вы советов... Ну не сложная же функция для Вашей задачи, а работать будет гООООраздо быстрее:
Код
( text as text, condition as text ) as text =>
let
textBeforeDelim = Text.BeforeDelimiter ( text, "_", { 0, RelativePosition.FromEnd } ),
textAfterDelim = Text.AfterDelimiter ( text, "_", { 0, RelativePosition.FromEnd } ),
conditionForReplace = Text.Length ( textAfterDelim ) = 2
and Text.Remove ( textAfterDelim, { "0" .. "9" } ) = ""
and not Text.EndsWith ( textBeforeDelim, condition ),
result = if conditionForReplace then textBeforeDelim else text
in
result
Пример:
Код
let
table = Table.FromColumns (
{ { "fff_сырный_и_для_гриля_02", "fgggg_аоаоао_03", "fgggg_аоаоао", "fgggg_аоаоао_005" } },
type table [ text = text ]
),
replace = Table.AddColumn ( table, "new text", each f_replaceEndText ( [text], "сырный_и_для_гриля" ), type text )
in
replace
Светлана Клешнева, Ваши файлы удалил - ознакомьтесь с правилами. И на форуме по Excel нужно не картинки показывать, а XL-файлы. И код следует оформлять соответствующим тегом. Ищите кнопку <...>
let
f_CaseSubstitution = ( text as text ) as text =>
[
lowerLetters = { "а" .. "я", "ё" },
capitalLetters = { "А" .. "Я", "Ё" },
replaceRec = Record.FromList ( lowerLetters & capitalLetters, capitalLetters & lowerLetters ),
replace = List.Accumulate (
Text.ToList ( text ),
"",
( s, c ) => s & Record.FieldOrDefault ( replaceRec, c, c )
)
][replace],
example = f_CaseSubstitution ( "а КАК ЗАМЕНИТЬ БОЛЬШИЕ БУКВЫ НА МАЛЕНЬКИЕ? и НАОБОРОТ? ))" )
in
example
surkenny, дело в том, что я не знаю язык М, еще не изучала этот язык настолько, что б самостоятельно функции создавать. А результат нужен сейчас. За помощь большое спасибо!