近来用 org-drill 来辅助记忆,看到一个记忆方法,把一段文字每隔一个字就隐藏一个字,类似这样:
方_柳_,乍_花_。但_处,鸟_庭_,将_时,影_回_。仙_乍_兮。闻_兰_馥_。荷_欲_兮,听_佩_铿_。靥_春_兮,云_翠_,唇_樱_兮,榴_含_。纤_之_楚_,回_舞_,珠_之_辉_,满_鹅_。出_花_兮,宜_宜_,徘_池_兮,若_若_。蛾_颦_兮,将_而_语,莲_乍_兮,待_而_行。羡_之_质_,冰_玉_,羡_之_服_,闪_文_。爱_之_容_,香_玉_。美_之_度_,凤_龙_。
这个是隐2 4 6 ……双数字。
_离_坞,_出_房。_行_,_惊_树,_到_,_度_廊。_袂_飘_,_麝_之_郁,_衣_动_,_环_之_锵。_笑_桃_,_堆_髻,_绽_颗_,_齿_香。_腰_楚_兮,_风_雪,_翠_辉_兮,_额_黄。_没_间_,_嗔_喜,_徊_上_,_飞_扬。_眉_笑_,_言_未_,_步_移_,_止_欲_。_彼_良_兮,_清_润,_彼_华_兮,_灼_章。_彼_貌_兮,_培_琢,_彼_态_兮,_翥_翔。
这是隐 1 3 5 …… 单数字。
跳过标点符号等等。
用elisp代码怎么实现这样的功能?处理一个文本文件或选中的文本内容都可。
一个粗糙的实现:
(defun my-hide (beg end)
(interactive "r")
(let ((pt beg)
(i 1))
(while (< pt end)
(when (aref (char-category-set (char-after pt)) ?C)
(when (cl-evenp i)
(put-text-property pt (1+ pt) 'display "_"))
(cl-incf i))
(cl-incf pt))))
(defun my-show (beg end)
(interactive "r")
(remove-text-properties beg end '(display)))
上面用 C: Chinese (Han) characters of 2-byte character sets
区别「中文字符」
(aref (char-category-set ?方) ?C)
;; => t
(aref (char-category-set ?,) ?C)
;; => nil
也可用正则表达式(都是一个意思):
(mapcar
(lambda (c)
(string-match (rx (category chinese-two-byte))
(string c)))
"方离柳坞,乍出花房。")
;; => (0 0 0 0 nil 0 0 0 0 nil)
6 个赞
昨晚草稿保存了一下,然后死活连不上网站了,以至没法修改,大囧。
隐藏的字(也就是下划线)部分,如果改成在原有的字两边加上 [ 和 ] ,要怎么实现呢?如下:
方[离]柳[坞],乍[出]花[房]……
和
[方]离[柳]坞,[乍]出[花]房……
这样的。
PS: 有比elisp更便捷的脚本语言实现不?
cireu
8
易学看人,不置可否。本人就觉得python的语法很怪异,我用Javascript。
库非常丰富,perl也有很多库,不见得py有的perl就没有。再说这本质就是扣字符串。
我只是反感你这种什么都得踏入沙漠构建海洋的想法。这东西Elisp做起来又不麻烦,用py反而可能人家又要重头学
2 个赞
cireu
11
python不用库可以方便的找出所有Unicode汉字吗?
chunyang已经给了一个了,我就不献丑了
知道20%就要自己懂剩下80%,这应该是你说过的(IIRC)
何为自嘲完美?
cireu
13
ELISP> (replace-regexp-in-string "\\(\\cC\\)" (concat "[\\1]") "你好騒啊")
"[你][好][騒][啊]"
2 个赞
你居然连审题都不会 你应该没有用过org-drill
你还得处理逗号、空格、换行符
如果人家要求你显示一句、隐藏一句,你不能做太多的改动。
cireu
17
他已经学到了怎么提取中文字符。我也演示了怎么加方括号。unix思维总得有点吧
(replace-regexp-in-string "\\(\\cC\\)\\(\\cC\\)" "\\1[\\2]" "你好騒啊")
ELISP> (thread-last "你说, 我怎么不从盘古开天僻地开始讲呢???????、\n 对不对?"
(replace-regexp-in-string (rx (1+ (not (category chinese-two-byte)))) " ")
(replace-regexp-in-string (rx (group-n 1 (category chinese-two-byte)) (group-n 2 (category chinese-two-byte)))
"\\1[\\2]"))
"你[说] 我[怎]么[不]从[盘]古[开]天[僻]地[开]始[讲]呢 对[不]对 "
有人可以回答我的问题吗
我吹perl干嘛,人家Unicode支持牛批啊!
万一楼主用到了扩展区的字符呢 Elisp也可以正确匹配扩展区字符
4 个赞
咱两各自用perl写个实现怎样
要求如下:
输入文本:
易学看人,不置可否。本人就觉得python的语法很怪异,我用Javascript。
输出文本,可根据配置输出四种不同的格式:
格式1:
易[学]看[人],不[置]可[否]。本[人]就[觉]得[python]的[语]法[很]怪[异],我[用]Javascript。
格式2:
[易]学[看]人,[不]置[可]否。[本]人[就]觉[得]python[的]语[法]很[怪]异,[我]用[Javascript]。
格式3:
易学看人,[不置可否]。本人就觉得python的语法很怪异,[我用Javascript]。
格式4:
[易学看人],不置可否。[本人就觉得python的语法很怪异],我用Javascript。
1 个赞