Textmate:用正则表达式替换匹配项并保留大小写吗?

Textmate:用正则表达式替换匹配项并保留大小写吗?

如何使用单个搜索/替换来替换此句子中的所有单词townvillage保留首字母的大小写:

Towns are small cities. I live in a town.

在此处输入图片描述

答案1

\b(?:(T)|t)own(s?)\b(?1:\u)village$2

(并在对话框中取消选中忽略大小写)

  • \b= 字边界
  • (?:)= 非捕获组
  • (?1:\u)= 如果捕获组 1 则将下一个字符转换为大写

答案2

我现在正在使用工作电脑,所以这里没有 TextMate 可以让我测试,但我认为这可能做你想做的事:

Find:     \b(T)?((?<!T)t)?(?<! )own(s)?\b
Replace:  (?1:Village)(?2:village)$3

(请确保先取消勾选‘忽略大小写’。)

解释:

“查找”模式搜索以 a或 aown开头的字母,然后分别将它们捕获到和。第二个捕获中的 确保你不会同时得到它们(例如一起),尽管这可能不太可能,并且 位表示前面不能有空格 - 这应该会阻止它单独匹配单词。两边的 表示它应该只匹配整个单词(否则它将匹配像和 这样的内容)。最后,部分捕获最后一个(如果存在)到。Tt$1$2(?<!T)Tt(?<! )ownown\btownieschown(s)?s$3

替换模式使用有条件插入确定用什么来替换文本。在伪代码中,替换字符串基本上是这样的:

if (the first capture [T] exists)  { replace the text by the word Village }
if (the second capture [t] exists) { replace the text by the word village }

(然后它添加$3,它要么为空,要么包含s

它很丑,但我认为无论如何它可能适用于你给出的例子。

相关内容