【问题标题】:regex substitute several special characters with other special characters in Textwrangler正则表达式用 Textwrangler 中的其他特殊字符替换几个特殊字符
【发布时间】:2017-11-15 17:00:21
【问题描述】:

字符 ̈(unicode 0x308)不能用“Western (ISO Latin 9)”编码表示。

我需要在许多 txt 文件中替换几 (3) 个这种特殊字符。理想的情况是我在 Mac 上运行的 TEXTWRANGLER 编辑器应用程序的一个正则表达式命令,这样我就可以在 Textwrangler 的查找和替换功能中使用(类似于 BBedit)。

以下是 3 个特殊字符:

  1. ä 变成ä
  2. ö 成ö
  3. ü入ü

(请注意第一个字母由两个字符组成(例如 a 和 ̈ unicode 0x308),因此它不是 WESTERN ISO LATIN compatibel。

我尝试了正则表达式(组),但没有成功: 在 TEXTWRANGLER 我使用 find&replace 功能(包括 grep=regex 选项)

查找:(ä|ö|ü)+

替换:\1ä、\2ö、\3ü

有什么想法吗?

【问题讨论】:

  • 你不能用一个正则表达式命令来做到这一点。这相当于创建正则表达式不支持的条件替换。到目前为止。至少AFAIK
  • 使用单个正则表达式执行此操作的唯一可能方法是将要用作替换的所有字符附加到文件末尾,然后匹配它,如下所示:ä([\s\S]*)(ä)替换$2$1。将其中的多个合并为一个,您将得到ä([\s\S]*)(ä)|ö([\s\S]*)(ö) 替换为$2$1$4$3。理想情况下,您希望使用分支重置,以便您可以将(?|ä([\s\S]*)(ä)|ö([\s\S]*)(ö)) 替换为$2$1。这是我知道有条件替换的唯一方法。否则,您将不得不使用单独的正则表达式。

标签: regex replace substitution textwrangler bbedit


【解决方案1】:

简介

我刚刚使用 Notepad++ 对此进行了测试,但我不确定这是否适用于任何 Mac 文本编辑器替代品。

此方法是使用正则表达式中的字典进行条件替换。它更像是一种 hack,但假设它受到文本编辑器的支持,它确实可以工作。完成后,从文件底部删除字典。


代码

See regex in use here

(ä|ö|ü)(?=[\s\S]*Dictionary:[\s\S]*\1=([^\s=:]+))

替换

\2

结果

输入

ä into a
ö into o
ü into u

输入 - 修改

这个输入包括最后的字典

ä into a
ö into o
ü into u

Dictionary:
ä=a
ö=o
ü=u

输出

a into a
o into o
u into u

Dictionary:
ä=a
ö=o
ü=u

说明

  • (ä|ö|ü)将组中的任一字符捕获到捕获组1中
  • (?=[\s\S]*Dictionary:[\s\S]*\1=([^\s=:]+)) 正向前瞻确保后续匹配
    • [\s\S]* 匹配任意字符任意次数
    • Dictionary: 匹配 Dictionary: 字面意思(这可以更改为任何内容,但您应确保这是一个不会出现在您输入的其他任何地方的唯一字符串)
    • [\s\S]* 匹配任意字符任意次数
    • \1 匹配第一个捕获组最近匹配的相同文本
    • = 匹配等号字符 = 字面意思
    • ([^\s=:]+) 将集合中不存在的一个或多个字符(不是空格,=:)捕获到捕获组 2 中

【讨论】:

    猜你喜欢
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多