OpenRefine: регулярное выражение возвращает null с match (), но true сtain () - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь извлечь даты из столбца строковых значений в OpenRefine.Все даты форматируются с точками или тире между значениями.(например, "a_string_12-2-15", "3.12.99_another_string")

Я попытался value.contains(/[0-9]+[.-][0-9]+[.-][0-9]+/), и все они вернули true.Однако value.match(/[0-9]+[.-][0-9]+[.-][0-9]+/) возвращает ноль.Я также попытался заменить [0-9] на \ d, но это не исправило.Что я делаю не так?

1 Ответ

1 голос
/ 25 сентября 2019

Функция match очень нелогична и работает не так, как вы думаете.Вы можете обойтись без этого.Начиная с Open Refine 3 есть функция find , которая делает именно то, что вы хотите.:)

Попробуйте вместо этого:

value.find(/[0-9]+[.-][0-9]+[.-][0-9]+/).join(',')

Часть .join(',') как раз на тот случай, если у вас есть несколько дат в одной строке.В противном случае это альтернатива:

value.find(/[0-9]+[.-][0-9]+[.-][0-9]+/)[0]

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

value.match(/.*?([0-9]+[.-][0-9]+[.-][0-9]+).*/).join(',')
...