Как найти два последовательных повторяющихся символа в RGB с помощью Regex?

Просто используйте немного currying:

def convertDateFunc(resolution: DateResolutionType) = udf((x:String) => 
  SparkDateTimeConverter.convertDate(x, resolution))

и используйте его следующим образом:

case FieldDataType.Date => convertDateFunc(resolution(i))(allCols(i))

На боковой ноте вы должны взглянуть на sql.functions.trunc и sql.functions.date_format. Они должны по крайней мере частично выполнять работу без использования UDF вообще.

Примечание:

В Spark 2.2 или более поздней версии вы можете использовать функцию typedLit:

import org.apache.spark.sql.functions.typedLit

, которые поддерживают более широкий диапазон литералов, таких как Seq или Map.

2
задан Wai Ha Lee 15 January 2019 в 17:11
поделиться

1 ответ

Шаблон \1 является обратной ссылкой на группу захвата 1, то есть (([0-9a-zA-Z])\1). Вы действительно хотите сослаться на группу захвата 2 и, таким образом, нуждаетесь в \2 вместо \1.

Обратите внимание, что \b# будет соответствовать только #, которому предшествует слово char (буква, цифра или _). Вам нужно использовать границу без слов в начале, \B.

Для соответствия шестнадцатеричным символам предпочтительнее [A-Fa-f], а не [A-Za-z].

Используйте

@"\B#(?:([0-9a-fA-F])\1){3}\b"

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

0
ответ дан Wiktor Stribiżew 15 January 2019 в 17:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: