Markdown記法で書かれた「Markdownファイルへのリンク」部分をWindowsで保存できる名前に変換する
ファイル名は先手打って対処する
リンク作るときに[](★ここでファイル名見ている)ので、ファイル名生成処理は convert の側に入れる必要がある
正規表現部分いじるのきついな
https://gyazo.com/66f9777083dc05a824112076fbcb7738
ファイル名生成処理は convert の側に入れる必要がある
本当に?
むしろ逆じゃない?
convertは「scb記法をmarkdown記法に変換するだけ」であって、「Windowsのファイルシステム上の制約に則った名前にする」は役割違う
が、変換処理全部の後で改めて変換し直すってのお
convert_step3()のここかな
https://gyazo.com/9a2501e5b903b8dbe7c49014efe763a1
icon記法変えてる処理と同じレイヤー
処理
普通に正規表現で ()[ここ] キャッチすればいいけど、コードブロック内のときはしない的な判定ができない
かといってinblockstate使った検出はしたくない
pagenameと「ここ」が一致したら ← これも加えるか
こっちしかなさそうか
あるいは正規表現使わずに replace 使ってしまうか
[](PAGENAME.md) になってるのは明らかなのだから、ページPAGENAMEのコンテンツをsとしたら、s.replace('(PAGENAME.md)', '★PAGENAMEから変換したファイル名.md')でいける
sta.iconいや何言うてん
「"ページPAGENAME"にリンクしているページ」なんてわからんやろ(Scrapboxみたいに事前計算でもしてない限りは)
正規表現練ってる
code:py
import re
RE_MARKDOWN_LINK = re.compile(r'\(.+?)\\((.+?)\)') s = '- リストだけどリンク(aaa.md)、ちなみにリンク2(bbb.md)複数回も問題ないよね?' results = re.search(RE_MARKDOWN_LINK, s)
print(results)
これだと最初しかヒットしない
かといってmatchだとそもそもヒットしない
code:subだと普通にいける.py
import re
RE_MARKDOWN_LINK = re.compile(r'\(.+?)\\((.+?)\)') s = '- リストだけどリンク(aaa.md)、ちなみにリンク2(bbb.md)複数回も問題ないよね?' results = re.sub(RE_MARKDOWN_LINK, '!!!', s)
print(results)
要するにキャッチした\2の部分を取り出したいんですけれど、どうやるんだ……?
なるほど、関数渡せばいいのか
https://gyazo.com/ab6d8cc44da10e1179dc64e287482ec3
見えた
https://gyazo.com/38b8ad8b2a51d507182a446042628734
code:py
import re
def f(match_object):
print(match_object.groups())
return '★'
RE_MARKDOWN_LINK = re.compile(r'\(.+?)\\((.+?)\)') s = '- リストだけどリンク(aaa.md)、ちなみにリンク2(bbb.md)複数回も問題ないよね?' results = re.sub(RE_MARKDOWN_LINK, f, s)
print(results)
なんかやりづらいな
https://gyazo.com/0d6a729cc1fcc6db74b2cd8b83f1830a
1で各ファイル名部分取れるのはわかったけど
returnが役立たず
n箇所分全部に適用しやがるので使えん
「(関数を渡して使う)re.sub」をwrapして、偶数番目のファイル名を返す的な関数をつくればいいか
code:py
import re
def f(match_object):
original_string = match_object.string
newstring = original_string
for group in match_object.groups():
print(group)
return '★'
RE_MARKDOWN_LINK = re.compile(r'\(.+?)\\((.+?)\)') s = '- リストだけどリンク(aaa.md)、ちなみにリンク2(bbb.md)複数回も問題ないよね?' results = re.sub(RE_MARKDOWN_LINK, f, s)
print(results)
ok
https://gyazo.com/e1b8eddb3a8a5b21c282728d7fd205ab