TextMate将正则表达式搜索的结果保存到新窗口中

时间:2010-11-10 16:05:04

标签: textmate

我希望能够在TextMate中执行搜索,但将生成的匹配项复制到单独的文件中。

我正在使用以下表达式:

(?<=\()(.*?)(?=\))

匹配嵌入文本行括号内的电子邮件地址,如下所示:

A N Other (another@example.com)

我正在处理的文件有几百个条目,全部用CR-LF(\ n)分隔。

我希望能够仅将文本的电子邮件片段提取到新文件中以供进一步处理。但是,TextMate中的搜索对话框似乎只支持替换匹配的文本。我只是想知道是否有办法实现这一目标。

3 个答案:

答案 0 :(得分:5)

这是超级旧版,但您可以在TextMate2中执行以下操作:

  1. 进行正则表达式搜索。
  2. 点击右侧结果上方搜索框中的齿轮菜单。
  3. 选择引用所需内容的“复制”选项。在这种情况下,“复制匹配部件。”
  4. http://manual.textmate.org/searching.html#search-results

答案 1 :(得分:2)

命令Bundles > Text > Filtering > Copy Matching Lines into New Document可能是一个很好的起点。你必须匹配整行,所以构造一个正则表达式来容纳(尽管丢弃)你要提取的实际文本之前和之后的任何内容。

答案 2 :(得分:-1)

据我所知,TextMate不能做你想要达到的目标。但是,正如您已经提到的,您希望处理您的文件,即您应该编写一个简单的脚本来执行它。 如果您需要经常解析这些文件,可能值得为TextMate编写命令(Bundles&gt; Bundle Editor&gt; Show Bundle Editor&gt; New Command)。 如果它是一次性活动,您可能最好从命令行执行所有操作,即使用grep,sed和awk(如果需要)处理文件并将其输出到另一个文件中。 或者使用您选择的脚本语言。在Ruby中它看起来像

matches =[]
File.open(ARGV.first, "r") do |file|
  while line = file.gets
    match = file.match(/your_regular_expression_with_grouping/)
    matches << match unless match.nil?
  end
end
# write out matches which are saved in matches as follows:
# matches[i][0] contains original line of text,
# matches[i][1] result of first grouping,
# matches[i][2] result of second grouping, ...