【问题标题】:Replace characters only in headings仅替换标题中的字符
【发布时间】:2021-05-13 19:51:16
【问题描述】:

我有几个文件(请参阅输入部分),我需要它来使用 REGEX 剥离 [[ ]],但问题是仅适用于:

- # headings
- >quotes

应保留所有其他括号。我无法通过...我正在使用崇高的阅读器。 如果有人有一些想法,我将非常感激! 谢谢

输入


## [[zoom]] _[v]_

>[[move]] | [[very]] | [[quickly]]

__Synonyms__: [[buzz]] | [[dart]] | [[dash]] | [[dive]] | [[flash]] | [[fly]] | [[hum]] | [[hurtle]] | outstrip | [[rip]] | [[rocket]] | [[rush]] | [[shoot]] | [[shoot]] up | [[skyrocket]] | [[speed]] | [[streak]] | [[surge]] | [[tear]] | [[whirl]] | [[whiz]] | [[zip]]

__Concepts__: [[ACTIONS - MOTION#move oneself quickly (150)\|move oneself quickly]] 

__Antonyms__: decelerate, [[slow]]

## [[zip]] _[n]_

>[[enthusiasm]], [[energy]]

__Synonyms__: brio | [[drive]] | [[get]]-upand-[[go]] | [[go]] | [[gusto]] | [[life]] | liveliness | [[oomph]] | [[pep]] | [[pizzazz]] | [[punch]] | [[sparkle]] | [[spirit]] | [[verve]] | [[vigor]] | vim | [[vitality]] | [[zest]] | [[zing]]

__Concepts__: [[LIFE FORMS - GENERAL CHARACTERISTICS#personality (411)\|personality]], [[STATES - ABSTRACT#behavior (633)\|behavior]] 

__Antonyms__: [[apathy]], enervation, [[idleness]], [[laziness]], [[lethargy]]
 
## [[zip]] _[v]_

>[[move]] | [[about]] | [[quickly]]

__Synonyms__: [[bustle]] | [[dash]] | [[flash]] | [[fly]] | [[hasten]] | [[hurry]] | [[run]] | [[rush]] | [[shoot]] | [[speed]] | [[tear]] | waltz | [[whisk]] | [[whiz]] | [[zoom]]

__Concepts__: [[ACTIONS - MOTION#move oneself quickly (150)\|move oneself quickly]] 

__Antonyms__: decelerate, [[slow]]

输出


## zoom _[v]_

>move very quickly

__Synonyms__: [[buzz]] | [[dart]] | [[dash]] | [[dive]] | [[flash]] | [[fly]] | [[hum]] | [[hurtle]] | outstrip | [[rip]] | [[rocket]] | [[rush]] | [[shoot]] | [[shoot]] up | [[skyrocket]] | [[speed]] | [[streak]] | [[surge]] | [[tear]] | [[whirl]] | [[whiz]] | [[zip]]

__Concepts__: [[ACTIONS - MOTION#move oneself quickly (150)\|move oneself quickly]] 

__Antonyms__: decelerate, [[slow]]

## zip _[n]_

>enthusiasm, energy

__Synonyms__: brio | [[drive]] | [[get]]-upand-[[go]] | [[go]] | [[gusto]] | [[life]] | liveliness | [[oomph]] | [[pep]] | [[pizzazz]] | [[punch]] | [[sparkle]] | [[spirit]] | [[verve]] | [[vigor]] | vim | [[vitality]] | [[zest]] | [[zing]]

__Concepts__: [[LIFE FORMS - GENERAL CHARACTERISTICS#personality (411)\|personality]], [[STATES - ABSTRACT#behavior (633)\|behavior]] 

__Antonyms__: [[apathy]], enervation, [[idleness]], [[laziness]], [[lethargy]]
 
## zip _[v]_

>move about quickly

__Synonyms__: [[bustle]] | [[dash]] | [[flash]] | [[fly]] | [[hasten]] | [[hurry]] | [[run]] | [[rush]] | [[shoot]] | [[speed]] | [[tear]] | waltz | [[whisk]] | [[whiz]] | [[zoom]]

__Concepts__: [[ACTIONS - MOTION#move oneself quickly (150)\|move oneself quickly]] 

__Antonyms__: decelerate, [[slow]]

【问题讨论】:

  • 你能显示任何你已经尝试过的 rx 吗?

标签: regex markdown sublimetext3


【解决方案1】:

您可以将文本分成几行,并通过每一行映射以有条件地进行清理:

function cleanBrackets(text) {
  return text
  .split(/\r?\n/)   // split into lines
  .map((line) => {  // for each line:
    if(line.match(/^[#>]/)) { // if heading or quote:
      line = line.replace(/\[\[([^\]]+)\]\]/g, '$1'); // cleanup
    }
    return line;
  })
  .join('\n');
}

console.log(cleanBrackets(`## [[zoom]] _[v]_

>[[move]] | [[very]] | [[quickly]]

__Synonyms__: [[buzz]] | [[dart]] | [[dash]] | [[dive]] | [[flash]] | [[fly]] | [[hum]] | [[hurtle]] | outstrip | [[rip]] | [[rocket]] | [[rush]] | [[shoot]] | [[shoot]] up | [[skyrocket]] | [[speed]] | [[streak]] | [[surge]] | [[tear]] | [[whirl]] | [[whiz]] | [[zip]]

__Concepts__: [[ACTIONS - MOTION#move oneself quickly (150)\|move oneself quickly]] 

__Antonyms__: decelerate, [[slow]]

## [[zip]] _[n]_

>[[enthusiasm]], [[energy]]

__Synonyms__: brio | [[drive]] | [[get]]-upand-[[go]] | [[go]] | [[gusto]] | [[life]] | liveliness | [[oomph]] | [[pep]] | [[pizzazz]] | [[punch]] | [[sparkle]] | [[spirit]] | [[verve]] | [[vigor]] | vim | [[vitality]] | [[zest]] | [[zing]]

__Concepts__: [[LIFE FORMS - GENERAL CHARACTERISTICS#personality (411)\|personality]], [[STATES - ABSTRACT#behavior (633)\|behavior]] 

__Antonyms__: [[apathy]], enervation, [[idleness]], [[laziness]], [[lethargy]]
 
## [[zip]] _[v]_

>[[move]] | [[about]] | [[quickly]]

__Synonyms__: [[bustle]] | [[dash]] | [[flash]] | [[fly]] | [[hasten]] | [[hurry]] | [[run]] | [[rush]] | [[shoot]] | [[speed]] | [[tear]] | waltz | [[whisk]] | [[whiz]] | [[zoom]]

__Concepts__: [[ACTIONS - MOTION#move oneself quickly (150)\|move oneself quickly]] 

__Antonyms__: decelerate, [[slow]]`));

结果:


## zoom _[v]_

>move | very | quickly

__Synonyms__: [[buzz]] | [[dart]] | [[dash]] | [[dive]] | [[flash]] | [[fly]] | [[hum]] | [[hurtle]] | outstrip | [[rip]] | [[rocket]] | [[rush]] | [[shoot]] | [[shoot]] up | [[skyrocket]] | [[speed]] | [[streak]] | [[surge]] | [[tear]] | [[whirl]] | [[whiz]] | [[zip]]

__Concepts__: [[ACTIONS - MOTION#move oneself quickly (150)|move oneself quickly]] 

__Antonyms__: decelerate, [[slow]]

## zip _[n]_

>enthusiasm, energy

__Synonyms__: brio | [[drive]] | [[get]]-upand-[[go]] | [[go]] | [[gusto]] | [[life]] | liveliness | [[oomph]] | [[pep]] | [[pizzazz]] | [[punch]] | [[sparkle]] | [[spirit]] | [[verve]] | [[vigor]] | vim | [[vitality]] | [[zest]] | [[zing]]

__Concepts__: [[LIFE FORMS - GENERAL CHARACTERISTICS#personality (411)|personality]], [[STATES - ABSTRACT#behavior (633)|behavior]] 

__Antonyms__: [[apathy]], enervation, [[idleness]], [[laziness]], [[lethargy]]
 
## zip _[v]_

>move | about | quickly

__Synonyms__: [[bustle]] | [[dash]] | [[flash]] | [[fly]] | [[hasten]] | [[hurry]] | [[run]] | [[rush]] | [[shoot]] | [[speed]] | [[tear]] | waltz | [[whisk]] | [[whiz]] | [[zoom]]

__Concepts__: [[ACTIONS - MOTION#move oneself quickly (150)|move oneself quickly]] 

__Antonyms__: decelerate, [[slow]]

【讨论】:

  • 问题是我有 13.000 个这样的文件!我一直在寻找更多非代码纯正则表达式解决方案。我可以在 sublime reader 中批量运行所有文件。您使用的是什么编程语言?这是一个javascript?
  • 是的,这是 JavaScript,可以轻松映射到任何语言。但我看到你正在寻找程序员的编辑器搜索和替换
  • 不确定是否可以使用单个正则表达式,因为您需要正则表达式中的正则表达式。可能使用单行perl?什么操作系统?
  • 我正在使用 Mac OS
【解决方案2】:

我认为有一种更简单的方法可以做到这一点。您只需要检查该行是否以##> 字符串开头。

下面的代码是python。

我是这样做的:

for line in my_file_data.split('\n'):
    if line.startswith(('##','>')):
        line = line.replace('[[','').replace(']]','')
    print (line)

我将所有原始数据存储到my_file_data。然后进行拆分以获取每一行。

这个输出是:

## zoom _[v]_

>move | very | quickly

__Synonyms__: [[buzz]] | [[dart]] | [[dash]] | [[dive]] | [[flash]] | [[fly]] | [[hum]] | [[hurtle]] | outstrip | [[rip]] | [[rocket]] | [[rush]] | [[shoot]] | [[shoot]] up | [[skyrocket]] | [[speed]] | [[streak]] | [[surge]] | [[tear]] | [[whirl]] | [[whiz]] | [[zip]]

__Concepts__: [[ACTIONS - MOTION#move oneself quickly (150)\|move oneself quickly]] 

__Antonyms__: decelerate, [[slow]]

## zip _[n]_

>enthusiasm, energy

__Synonyms__: brio | [[drive]] | [[get]]-upand-[[go]] | [[go]] | [[gusto]] | [[life]] | liveliness | [[oomph]] | [[pep]] | [[pizzazz]] | [[punch]] | [[sparkle]] | [[spirit]] | [[verve]] | [[vigor]] | vim | [[vitality]] | [[zest]] | [[zing]]

__Concepts__: [[LIFE FORMS - GENERAL CHARACTERISTICS#personality (411)\|personality]], [[STATES - ABSTRACT#behavior (633)\|behavior]] 

__Antonyms__: [[apathy]], enervation, [[idleness]], [[laziness]], [[lethargy]]
 
## zip _[v]_

>move | about | quickly

__Synonyms__: [[bustle]] | [[dash]] | [[flash]] | [[fly]] | [[hasten]] | [[hurry]] | [[run]] | [[rush]] | [[shoot]] | [[speed]] | [[tear]] | waltz | [[whisk]] | [[whiz]] | [[zoom]]

__Concepts__: [[ACTIONS - MOTION#move oneself quickly (150)\|move oneself quickly]] 

__Antonyms__: decelerate, [[slow]]

【讨论】:

  • 是的,这也有效。 |我循环所有文件 >>> 调用你的程序 >>> 将更改读回文件 |谢谢你的python解决方案!
【解决方案3】:

在 sublime 文本编辑器中,您可以使用 PCRE 风格的正则表达式。以下应该对您有用。

搜索正则表达式:

(?:^[#>]|(?!^)\G).*?\K(?:\[\[|]])

用空字符串替换。

RegEx Demo

正则表达式详细信息:

  • (?:: 启动非捕获组
    • ^[#>]:匹配#>开头
    • |:或者
    • (?!^)\G: 从上一场比赛结束重新开始比赛
  • ):结束非捕获组
  • .*?:匹配 0 个或多个任意字符(惰性)
  • \K: 重置比赛信息
  • (?:\[\[|]]):匹配 [[]]

【讨论】:

  • 好吧,这真是令人兴奋!我真的希望有一些漂亮的正则表达式解决方案,但这超出了我的预期!请问您有什么好的资源可以让我更深入地研究 PCRE 正则表达式吗?非常非常感谢你!为此
  • 但是当我测试你之前写的RegEx Demo时,由于某种原因,我得到了错误engine error
  • 这里是演示链接:regex101.com/r/GCJJzN/1,它在那里工作正常
  • 替代解决方案是^(?![#>]).*(*SKIP)(*F)|\[\[|]]
【解决方案4】:

以下似乎有效:

^_.*(*SKIP)(*F)|\[\[|]]
  • ^ - 开始字符串锚点。
  • _.* - 匹配下划线和 0+ 个除换行符以外的其他字符。
  • (*SKIP)(*F) - 将控制动词回溯到 (*F)(*FAIL) 的简写。这种控件组合基本上说:"Throw away anything you can match to the left of me."
  • | - 或者:
  • \[\[ - 双文字左括号。
  • | - 或者:
  • ]] - 双文字右括号。

在线查看demo


为了使这更具限制性,您可以使用:

^[^#>\n].*(*SKIP)(*F)|\[\[|]]

唯一的区别是否定字符类确保我们不只是寻找以下划线开头的行。


之前:

之后:

【讨论】:

  • 这很好,但我们可以假设我们只需要忽略下划线吗?这就是为什么我建议这个的变体
  • @anubhava,是的,这就是为什么我在答案末尾添加了一个变体,以便更明确地说明我们不想想要匹配的内容,尽管样本数据表明下划线可能只是工作=)。
  • 哇!所以这是纯正则表达式解决方案!没有 perl 语法,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多