使用 Raku 进行文本处理
— 焉知非鱼文本处理 #
1)对于字符串:A_B_C_D_E.mp4,如何匹配倒数第二个“_”?
2)问题1: 每行行首都是下列形式数字章节号开头 1.1 1.1.1 1.1.2 1.2 1.2.1 1.2.2 1.3 以上章节号每个占据一行,章节号后面均有一个空格字符,然后是数量不定的英文或中文字符或数字,最后两个字符是tab空格和位数不限的数字。
章节号里有1个小数点的,行首加1个tab空格;2个小数点的,行首加2个tab空格,以此类推。
问题2: 每行行首大多数是以问题1的数字开头,但有部分是以英文或汉字开头,怎么吧以英文或汉字开始的行合并到上一行去?
问题1原始数据: 1.1 甲 1 1.1.1 yi 2 1.1.1.1 4 3 1.2 乙 14 1.2.1 yi 20 1.2.1.1 4 32
问题1期望数据: 1.1 甲 1 1.1.1 yi 2 1.1.1.1 4 3 1.2 乙 14 1.2.1 yi 20 1.2.1.1 4 32
问题2原始数据: 1.1 甲 1 1.1.1 yi 哈 2 1.1.1.1 4 3 1.2 乙 AV 4 1.2.1 yi 20 1.2.1.1 4 32
问题2期望数据: 1.1 甲 1 1.1.1 yi哈 2 1.1.1.1 4 3 1.2 乙AV 4 1.2.1 yi 20 1.2.1.1 4 32
3)根据某些字符对齐
比如根据r2对齐。
123123123, r2 123,r2
按照tab或者空格,像下面这样对齐。
123123123, r2 123, r2
4)匹配中文
.Str.say for ‘J00我是中文字’.match(/<:Hani>/,:g);
- 区分大小写替换
正则替换时能保留原来的大小写规则进行替换。
login -> login Login -> Reg LOGIN -> REG
6)文本内容的查找插入
一个文本文件,格式如下:
2012-10-01 一行文本内容 又一行文本内容 2012-10-02 又又一行文本内容
现在想把表示日期的比如2012-10-01放到“一行文本内容”的前面,形成如下: 2012-10-01,一行文本内容 2012-10-01,又一行文本内容 2012-10-02,又又一行文本内容
7)文本处理
需要处理从串口传过来的数据,传过来的字串长度是固定的,前导固定为‘’﹂+‘’,末尾固定为‘’B﹁‘’。具体例子: ﹂+00185621B﹁ 其中前6位数字是有效数字(本例为001856),接下来那一位数字是从右向左的小数位数(本例为2),余下的不要。最后的结果要处理成小数。 对于本例,前后的特殊字符和字母都不要,有效数字是001856,前面两个零没意义,就变为1856,又因为小数位数为2,最终变成18.56。