Azure Data Explorer, Kusto: регулярное выражение не является семантически правильным в extract () - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь получить подстроку значения столбца в Kusto.

Я знаю, что строке всегда предшествует формат «текст для развлечения-», затем строка букв, которую я хочу, за которой следует все, что не является буквой.

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

Однако, когда я пытаюсь ввести регулярное выражение, я продолжаю получать SEM0420: Semantic error: Regex pattern is ill formed.

Можете ли вы помочь мне выяснить, как правильно ввести регулярное выражение?

Пример строки: stuff milk-cow-cocoa a/123

Желаемая подстрока: cocoa

Текущая regex: (?<=milk-cow-\s*).*?(?=\s*[^A-Za-z])

Примечание : похоже, что отдельные звездочки удаляются. Они появляются ниже в коде.

На этом этапе \s предназначены для защитного синтаксического анализа строки и удаления пробелов. Конец общей строки также может существовать сразу после желаемой подстроки.

Я пробовал что-то похожее на этот оператор Data Explorer:

cluster("mine").database("mine").
DataTable
| where PreciseTimeStamp >ago(5h) and resourceProvider == "Provider" 
| where info has "cow-milk-"
| take 200
| project extract("(?<=milk-cow-\\s*).*?(?=\\s*[^A-Za-z])", 0, info), info 

Мне пришлось добавить дополнительную \ перед каждым \, чтобы проводник данных мог правильно проанализировать строки.

1 Ответ

0 голосов
/ 28 мая 2020

Ваш механизм регулярных выражений подавляется при просмотре назад и, возможно, при просмотре вперед.

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

| project extract("milk-cow-\\s*([a-zA-Z]+)", 1, info)

Это означает

  • milk-cow- - соответствие milk-cow-
  • \s* - соответствие 0 или более пробелов
  • ([a-zA-Z]+) - сопоставить и захватить в Группу 1 только одну или несколько букв ASCII.
...