【问题标题】:RegExp replace all but selected正则表达式替换所有未选中的
【发布时间】:2016-08-26 23:36:29
【问题描述】:

因此,我尝试使用 Notepad++ RegExp Find/Replace 删除此 1900 行文档中除匹配大小写之外的所有内容,以便我只有文件名,这将其至少缩短到大约 1000 行以下。我知道选择文本的代码((?<=/images/item/)(.*)(?=" a),但问题是我不知道如何让它删除与该大小写不匹配的任何内容。这是文档的一部分。

使用notepad++,它会找到并选择abyssal-scepter.gifaegis-of-the-legion.gif

<img src="/images/item/abyssal-scepter.gif" alt="LoL Item: Abyssal Scepter"><br>                                                                                                                <div id="id_77" class="tier-wrapper drag-items health magic-resist health-regen champ-box float-left ajax-tooltip {t:'Item',i:'77'} classic-and-dominion filter-is-dominion filter-is-classic filter-tier-advanced filter-bonus-aura       filter-category-health filter-category-magic-resist filter-category-health-regen ui-draggable ui-draggable-handle">
<img src="/images/item/aegis-of-the-legion.gif" alt="LoL Item: Aegis of the Legion"><br>                                                                                                                    <div id="id_235" class="tier-wrapper drag-items ability-power movement champ-box float-left ajax-tooltip {t:'Item',i:'235'}    filter-tier-advanced   filter-bonus-unique-passive     filter-category-ability-power filter-category-movement ui-draggable ui-draggable-handle">
<img src="/images/item/aether-wisp.gif" alt="LoL Item: Aether Wisp"><br>
<div class="info">
<div class="champ-name">Aether Wisp</div>
<div class="champ-sub">

<img src="/images/gold.png" alt="Item Cost" style="width:16px; vertical-align:middle;"> 850 / 415
</div>
</div>                  
</div>
<div id="id_21" class="tier-wrapper drag-items ability-power champ-box float-left ajax-tooltip {t:'Item',i:'21'} classic-and-dominion filter-is-dominion filter-is-classic filter-tier-basic        filter-category-ability-power ui-draggable ui-draggable-handle">
<img src="/images/item/amplifying-tome.gif" alt="LoL Item: Amplifying Tome"><br>
<div class="info">
<div class="champ-name">Amplifying Tome</div>
<div class="champ-sub">

我对 RegExp 不熟悉,所以总结一下,我需要它在结尾处看起来像这样。

abyssal-scepter.gif
aegis-of-thelegion.gif
aether-wisp.gif
amplifying-tome.gif

感谢您的宝贵时间

【问题讨论】:

  • 如果您使用的是 Notepad++,为什么要使用 JavaScript 标签?
  • 看看这个关于负选择的问题:stackoverflow.com/questions/164414/…
  • @Arashsoft:删除固定长度的文本。一种更全面的方法是通过交替使用要保留的捕获模式和带有模式的(展开的)回火贪婪令牌以丢弃该部分。根据输入的类型,可以使用.* 进行简单的替换。
  • 我会CTRL+A,CTRL+C,在我的浏览器中打开开发工具,写var str = "{CTRL+V}";之类的东西但是用引号,我们在这里用高亮代码,然后执行我的str.match(...).join("\n")

标签: regex


【解决方案1】:

记事本++解决方案:

查找内容:.*?/images/item/(.*?)"|.*
替换为:$1\n
搜索模式:正则表达式(选中“. matches newline”)

结果将在末尾有一个额外的换行符。
但我想这不应该构成问题。

【讨论】:

  • 谢谢,效果很好。但是因为我在考虑 c9 的 ide 以及它如何使用 javascript 查找和替换时不小心添加了 javascript,所以我再次被禁止问我的许多问题.. :(
  • 很高兴听到它有帮助。是的,javascript 中的 javascript 风格比 PHP 和 Notepad++ 中使用的 PCRE 风格更受限制。一条通俗易懂的规则,当正则表达式在 javascript 中工作时,它可能会在其他正则表达式风格中工作。
  • 我添加了 JavaScript,因为 JS 不支持lookbehind,这就是我认为需要的
【解决方案2】:

也许这会有所帮助。 或者没有,因为您从原始帖子中删除了 Javascript 标记

<script type="text/javascript">
    var thestring = "<img src=\"/images/item/aegis-of-the-legion.gif\" alt=\"LoL Item: Aegis of the Legion\"><br>";
    var thestring2 = "<img src=\"/images/otherstuff/aegis-of-the-legion.gif\" alt=\"LoL Item: Aegis of the Legion\"><br>";

    function ParseIt(incomingstring) {
        var pattern = /"\/images\/item\/(.*)" /;
        if (pattern.test(incomingstring)) {
            return pattern.exec(incomingstring)[1];
        }
        else {
            return "";
        }
        //return pattern.test(incomingstring) ? pattern.exec(incomingstring)[1] : "";
    }
</script>

调用 ParseIt(thestring) 返回“aegis-of-the-legion.gif”

调用ParseIt(thestring2)返回“”

【讨论】:

    【解决方案3】:

    由于您在 NP++ 中执行此操作,因此这对我有用。在这种情况下,速度和结果比特定技术更重要,我通常会运行几个正则表达式。首先,我将通过搜索&gt; 并将其替换为&gt;\n 将每个标签放在自己的行中。这将每个标签放在自己的行上,以便于处理。然后用$1 替换^&gt;*&lt;.*?".*?/?([\w\d\-_]+\.\w{2,4})?".*&gt;.*$ 将从标签中提取所有文件名,删除不需要的文本。最后,要清除所有没有文件名的标签,只需将&lt;.*&gt; 替换为空字符串即可。最后,使用 Edit>Line Operations>Remove empty lines,你就会得到你想要的结果。这不是 100% 的正则表达式解决方案,但这是一次性操作,您只需要一个简单的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多