快速简易的分解歌词文件

 2023-09-05 阅读 59 评论 0

摘要:快速简易的分解歌词文件 以下是一个歌词文件,如何快速的分解出来呢? 李克勤 - 月半夜小夜曲.lrc [ti:月半夜小夜曲] [ar:李克勤] [by:TTPod] [00:01.48]月半小夜曲 [00:05.66]作词:向雪怀 [00:10.66]作曲:河合奈保子 [00:15.63]演唱:李克勤 [00:20.63]

快速简易的分解歌词文件

以下是一个歌词文件,如何快速的分解出来呢?

李克勤 - 月半夜小夜曲.lrc

[ti:月半夜小夜曲]
[ar:李克勤]
[by:TTPod]
[00:01.48]月半小夜曲
[00:05.66]作词:向雪怀
[00:10.66]作曲:河合奈保子
[00:15.63]演唱:李克勤
[00:20.63]
[00:24.56]仍然倚在失眠夜望天边星宿
[00:30.46]仍然听见小提琴如泣似诉再挑逗
[00:36.30]为何只剩一弯月留在我的天空
[00:42.92]这晚以后音讯隔绝
[00:48.29]人如天上的明月是不可拥有
[00:54.26]情如曲过只遗留无可挽救再分别
[01:00.15]为何只是失望填密我的空虚
[01:06.82]这晚夜没有吻别
[01:12.23]仍在说永久想不到是借口
[01:18.40]从未意会要分手
[01:27.42]但我的心每分每刻仍然被她占有
[01:34.25]她似这月儿仍然是不开口
[01:39.12]提琴独奏独奏着明月半倚深秋
[01:45.52]我的牵挂我的渴望  直至以后
[01:51.70]
[02:21.15]仍然倚在失眠夜望天边星宿
[02:27.06]仍然听见小提琴如泣似诉再挑逗
[02:32.97]为何只剩一弯月留在我的天空
[02:39.59]这晚以后音讯隔绝
[02:45.02]人如天上的明月是不可拥有
[02:51.08]情如曲过只遗留无可挽救再分别
[02:56.92]为何只是失望填密我的空虚
[03:03.63]这晚夜没有吻别
[03:08.75]仍在说永久想不到是借口
[03:15.23]从未意会要分手
[03:23.95]但我的心每分每刻仍然被她占有
[03:30.60]她似这月儿仍然是不开口
[03:35.79]提琴独奏独奏着明月半倚深秋
[03:42.26]我的牵挂我的渴望  直至以后
[03:47.86]仍在说永久想不到是借口
[03:54.09]从未意会要分手
[04:02.76]但我的心每分每刻仍然被她占有
[04:09.88]她似这月儿仍然是不开口
[04:14.85]提琴独奏独奏着明月半倚深秋
[04:21.25]我的牵挂我的渴望  直至以后
[04:29.00]
[00:00.001]>>>>>>>>>>>>>!
[00:00.009]
[99:00.000]

分解不用正则表达式,而用for循环折腾你就out了.block遍历以及forin方式都是设计模式中的迭代器模式,效率要比for循环高哦.

YXRegex.h + YXRegex.m

//
//  YXRegex.h
//  Regex
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//#import <Foundation/Foundation.h>typedef void (^textCheckingResult)(NSTextCheckingResult *match, NSRange matchRange);@interface YXRegex : NSObject#pragma mark - 可读写属性
@property (nonatomic, strong)   NSString   *regexString;
@property (nonatomic, strong)   NSString   *sourceString;#pragma mark - 只读属性
@property (nonatomic, readonly) NSUInteger  numberOfMatches;#pragma mark - 类方法
+ (void)string:(NSString *)stringpattern:(NSString *)patterneach:(textCheckingResult)block;
+ (NSString *)string:(NSString *)stringpattern:(NSString *)patternreplaceTemplate:(NSString *)string;#pragma mark - 实例方法
- (instancetype)initWithSourceString:(NSString *)sourceStringregexString:(NSString *)regexString;
- (void)startAnalyse;
- (void)each:(textCheckingResult)block;
- (NSString *)replaceWithTemplateString:(NSString *)string;@end


//
//  YXRegex.m
//  Regex
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//#import "YXRegex.h"@interface YXRegex ()@property (nonatomic, strong) NSArray              *resultArray;
@property (nonatomic, strong) NSRegularExpression  *regex;@end@implementation YXRegex- (instancetype)init
{return [self initWithSourceString:nil regexString:nil];
}- (instancetype)initWithSourceString:(NSString *)sourceStringregexString:(NSString *)regexString
{self = [super init];if (self){_sourceString = sourceString;_regexString  = regexString;}return self;
}- (void)startAnalyse
{if ([_sourceString length] && [_regexString length]){// 正则表达式_regex = \[NSRegularExpression regularExpressionWithPattern:_regexStringoptions:NSRegularExpressionCaseInsensitiveerror:nil];// 执行相关匹配操作NSRange range = NSMakeRange(0, [_sourceString length]);_resultArray = [_regex matchesInString:_sourceStringoptions:0range:range];// 获取到个数_numberOfMatches = [_resultArray count];}else{NSLog(@"亲,请设置需要分析的字符串以及正则表达式");}
}- (void)each:(textCheckingResult)block
{if (_resultArray){for (NSTextCheckingResult *match in _resultArray){block(match, [match range]);}}
}- (NSString *)replaceWithTemplateString:(NSString *)string
{if (string){return [_regex stringByReplacingMatchesInString:_sourceStringoptions:0range:NSMakeRange(0, [_sourceString length])withTemplate:string];}else{return nil;}
}+ (void)string:(NSString *)string pattern:(NSString *)pattern each:(textCheckingResult)block
{if ([string length] && [pattern length]){// 正则表达式NSRegularExpression *regex = \[NSRegularExpression regularExpressionWithPattern:patternoptions:NSRegularExpressionCaseInsensitiveerror:nil];// 执行相关匹配操作NSRange range = NSMakeRange(0, [string length]);NSArray *matches = [regex matchesInString:stringoptions:0range:range];// 匹配好了for (NSTextCheckingResult *match in matches){block(match, [match range]);}}
}+ (NSString *)string:(NSString *)stringpattern:(NSString *)patternreplaceTemplate:(NSString *)templateString
{if ([string length] && [pattern length]){// 正则表达式NSRegularExpression *regex = \[NSRegularExpression regularExpressionWithPattern:patternoptions:NSRegularExpressionCaseInsensitiveerror:nil];return [regex stringByReplacingMatchesInString:stringoptions:0range:NSMakeRange(0, [string length])withTemplate:templateString];}else{return nil;}
}@end

分解歌词的源码:
// 读取歌词NSString *str = [NSString stringWithContentsOfFile:BUNDLE_PATH(@"李克勤 - 月半夜小夜曲.lrc")encoding:NSUTF8StringEncodingerror:nil];// 将歌词根据换行符分割成数组NSArray *strArray = [str componentsSeparatedByString:@"\n"];// 分解歌词[strArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {// 初始化一个可变字符串__block NSMutableString *tmpStr = [[NSMutableString alloc] initWithString:obj];// 正则表达式匹配出[**:**.**]的位置[YXRegex string:tmpStrpattern:@"\\[..:..\\...\\]"each:^(NSTextCheckingResult *match, NSRange matchRange) {// 获取时间轴NSString *time = [tmpStr substringWithRange:matchRange];// 获取歌词文本[tmpStr replaceCharactersInRange:matchRange withString:@""];// 打印出信息NSLog(@"%@ --> %@", time, tmpStr);}];}];

打印信息如下:

要善于利用NSRange来帮助你解决问题.

 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/1170.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息