Как я могу извлечь значения из имени файла? - PullRequest
3 голосов
/ 30 июня 2019

У меня есть несколько файлов с одинаковым именем: 'RefBu12CyclesAmpl0.20Freq2.25VR0.0000Dist4cmSilence25000Fs25MHz'. Я попытался создать функцию, которая будет возвращать значения и определять разницу между строками и цифрами, но я могу заставить ее возвращать правильные значения.

Есть идеи?

function [File] = get_somenthing(file_name)   
expression = '(?<Cycles>\d+)(?<Ampl>\D\S.+)(?<Freq>\d+)(?<VR>\d\S+)(?<Dist>\d.+)(?<Silence>\d+)(?<Fs>\d)'   
File = regexp(file_name,expression,'names')   

Ответы [ 3 ]

1 голос
/ 01 июля 2019

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

s = 'RefBu12CyclesAmpl0.20Freq2.25VR0.0000Dist4cmSilence25000Fs25MHz';
values_str = regexp(s, '\d+(\.\d+)?', 'match');
values = str2double(values_str);

Это дает

>> values_str
values_str =
  1×7 cell array
    {'12'}    {'0.20'}    {'2.25'}    {'0.0000'}    {'4'}    {'25000'}    {'25'}

>> values
values =
   1.0e+04 *
   0.001200000000000   0.000020000000000   0.000225000000000                   0   0.000400000000000   2.500000000000000   0.002500000000000
0 голосов
/ 01 июля 2019

Возможно, вы можете просто разбить строку на символы, поэтому все, что осталось, должно быть числами:

values = [ float(x) for x in re.split('[a-zA-Z]', fname) if x ]

или если вы хотите разбить имя файла на пары (имя, значение):

names_values = [ (x[0], float(x[1])) for x in re.findall(r'([a-zA-Z]+)(\d+[\.\d+]*)', fname) ]

Тест: https://ideone.com/02JqmD

0 голосов
/ 01 июля 2019

Это может работать (это еще не функция):

fn = 'RefBu12CyclesAmpl0.20Freq2.25VR0.0000Dist4cmSilence25000Fs25MHz';

pattern = 'RefBu(?<cycles>\d+)CyclesAmpl(?<ampl>\d+\.?\d*)Freq(?<freq>\d+\.?\d*)VR(?<vr>\d+\.?\d*)Dist(?<dist>\d+)cmSilence(?<silence>\d+)Fs(?<fs>\d+)MHz';

values = regexp(fn, pattern, 'names')

Результат:

values = 

  struct with fields:

     cycles: '12'
       ampl: '0.20'
       freq: '2.25'
         vr: '0.0000'
       dist: '4'
    silence: '25000'
         fs: '25'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...