Выражение регулярного выражения, которое исключает подчеркивания, но только если они находятся перед цифрой или заглавной буквой? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть строка, представляющая имя файла, которое поставляется с кодом объединенной бизнес-единицы + отметка времени, например: alfin_cf_cashflowcomposition_X0826_20180726122003.csv

Я хочу получить исключение кода BU и метки времени и в итоге получить раздетое имя, поэтому я хочу получить следующее: alfin_cf_cashflowcomposition.csv

До сих пор мне удавалось сопоставлять только строчные буквы, точки и подчеркивания (таким образом, исключая прописные буквы X и цифры, представляющие временную метку).

Я использовал это простое выражение: / [a-z ._] и получил такой результат: alfin_cf_cashflowcomposition __. Csv

Обратите внимание, что перед ".csv" есть 2 подчеркивания. Я не хочу, чтобы те там.

Я хочу только подчеркивание, если следующий символ - строчная буква.

Мне нужно написать регулярное выражение, которое игнорирует подчеркивание, если следующий символ является заглавной буквой или цифрой.

Есть идеи, как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

вы можете использовать _.[A-Z,0-9].*(?=.csv) это регулярное выражение работает. Вы можете проверить это онлайн здесь https://regexr.com/

0 голосов
/ 29 августа 2018

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

Я реализовал этот простой код в javascript.

const orig_filename = "alfin_cf_cashflowcomposition_X0826_20180726122003.csv";

function strip_codes (orig){
  const extpos = orig.lastIndexOf('.');
  const nameparts = orig.substr(0,extpos).split('_');
  const ext = orig.substr(extpos);
  const name = nameparts
    .slice(0, nameparts.length - 2)
    .join('_');
  return name + ext;
}

console.log(strip_codes(orig_filename));
...