我有多个以相同方式命名的文件:'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')
答案 0 :(得分:1)
以下常规表达式匹配数字(可选),后跟点和数字。我认为数字是真实的,不包含符号,并且不能使用科学计数法:
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
答案 1 :(得分:0)
这可能有效(尚不可用):
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'
答案 2 :(得分:0)
也许您可以按字符分割字符串,所以剩下的应该是数字:
{{\Illuminate\Support\Str::limit($text)}}
或者如果您想将文件名成对((名称,值):
values = [ float(x) for x in re.split('[a-zA-Z]', fname) if x ]