我在通过正则表达式重命名文件时遇到了这个问题(使用Mp3tag)。
我知道问题是什么,并创建这篇文章以帮助其他人,寻找同样的问题。我也在寻找其他解决方法的建议。
以下是我遇到的问题:
我想替换文件名中的所有“Umlaute”。在这种情况下,它是“ä”。在“常规”“ä”无效后,我决定将文件名中的字母复制到我的正则表达式中。
正则表达式:[ää]
或[ä]
替换:ae
文件名:Hätte hätte Fahrradkette.avi
预期结果: Haette haette Fahrradkette.avi
结果我得到了: Haeaette haeaette Faehrraedkette.aevi
https://www.regex101.com/r/RZkHFG/1
ä
(U + 00E4)是单个unicode符号(“带分音符的拉丁文小写字母”)
-
ä
看起来像一个unicode符号,即使在通过键盘/鼠标选择时也是如此。
但实际上有2个符号!
a
(U + 0061)(“拉丁文小写字母a”)
̈
(U + 0308)(“结合分音符”)
如果你知道这一点,正则表达式的“奇怪”行为就会变得非常清楚。捕获组由2个符号组成,它们将独立匹配。这就是为什么所有常规“a”也将被替换的原因。
我当前的解决方法如下所示:([ä]|ä)
(我保留捕获组,因为在某些情况下我有多个应该被替换的符号)
https://www.regex101.com/r/mzHsG2/1
有没有人有更好/更清洁的解决方案?
将̈
替换为“e”只适用于ä
ö
ü
- > ae
oe
ue
,但在̈
与不同符号一起使用时,通常会将其替换为“e”可能会导致不必要的结果。