「長い文字列を…で省略」の話。
「javaにはcommons.langがあるんだぜ、StringUtils.abbreviateで一撃なんだぜ」と言われそうだ。そしてこれを「電池付きを謳う Python のくせにできねーんでやんの」と dis られそうだ。
つーか言語関係ないのね、このトピック。stackoverflow からのアイディアより:
1 # -*- coding: utf-8 -*-
2 # 以下はまぁお約束と言うか、日本語と闘うための鍋の具
3 import codecs, sys
4 sys.stdout = codecs.getwriter('cp932')(sys.stdout)
5
6 # 以下だけが本題
7 import re
8 print(
9 re.sub(
10 r'^(.{8}).*(.{8})$',
11 '\g<1>...\g<2>',
12 u"Mewを5年以上ぶりくらいに使った、そして北陸新幹線開通記念にちょっとだけ富山弁してみた"))
13 print(
14 re.sub(
15 r'^(.{8}).*(.{8})$',
16 '\g<1>...\g<2>',
17 u"Mewを5年以上け富山弁してみた"))
18 print(
19 re.sub(
20 r'^(.{8}).*(.{8})$',
21 '\g<1>...\g<2>',
22 u"Mewを5年以上富山弁してみた"))
23 print(
24 re.sub(
25 r'^(.{8}).*(.{8})$',
26 '\g<1>...\g<2>',
27 u"Mewをた"))
実行するとこうなる:
1 Mewを5年以上...け富山弁してみた
2 Mewを5年以上...け富山弁してみた
3 Mewを5年以上富山弁してみた
4 Mewをた
なんでも正規表現で済ませるのはどうかしているが、正規表現さえあればどうとでもなる、ということでもあり。「素の C/C++」と「スクリプト言語」を隔てる最重要の違いが正規表現だというのはまぁ、こういうことなのであるね。いまどきのスクリプト言語で正規表現を扱えないものなんか、ないよね。
2018-02-16、つまり3年後くらいの追記:
Python, PowerShell, Java, Ruby でネタを書いたが、ほんとに javascript でこれにご用で。
無論発想はおんなじ:
1 let report = url + ": " + xhr.responseText + " (status: " + xhr.status + ")";
2 let excerpt = report.replace(/^(.{30}).*(.{30})/, "$1...$2");
3 $("#status-bar-text").html(excerpt);
名前からわかる通り「ステータスバー的なもの」に流し込むテキストで、これが溢れると非常にみっともないことなるもんで。(無論これだけではダメで、ちゃんと全文読める UI も別途作ってる。)