【问题标题】:How to find and replace contents of a bracket inside notepad++如何在记事本++中查找和替换括号的内容
【发布时间】:2013-05-21 14:24:33
【问题描述】:

我有一个大文件,每个括号内都有内容。这不在行首。

1. Atmos-phere (7800)
2. Atmospheric composition (90100)
3.Air quality (10110)
4. Atmospheric chemistry and composition (889s120)
5.Atmospheric particulates (10678130)

我需要做以下事情

  1. 替换整个内容,去掉行号
    1.Atmosphere (10000)改为纯Atmosphere

  2. 同时删除行号 1.Atmosphere (10000) 到普通的Atmosphere

  3. 将其设为超链接 1.Atmosphere (10000) 到普通的<a href="http://blahqd.com/Atmosphere.htm">linky study</a>

  4. [我添加/编辑] 将单词提取到一个新文件中,在其中我们得到一个简单的关键词列表。能否请您解释一下替换 \1\2 中的数字,并在某些字符上转义

    1. 每组关键词都是一个新行
      Atmospheric
      Atmospheric composition
      Air quality

    2. 每个集合都是一行,由一个空格和逗号分隔
      Atmospheric, Atmospheric composition, Air quality

我尝试像这样使用正则表达式查找,\(*\) 它找到了括号,但不知道如何替换它,以及在哪里放置替换,以及哪个变量保存替换值。

【问题讨论】:

  • 创建一个新问题可能比在原始问题上添加更多内容更好。

标签: regex replace notepad++


【解决方案1】:

这是我的记事本表达式([0-9(). ]*)(.*)(\s\()(.*)

  1. 您需要分组搜索

    1. ([0-9. ]*)数字、空格和点组合0次或多次

    2. (.*) 下一个表达式之前的所有内容

    3. (\s\() 空格和左括号

    4. (.*) 其他一切

  2. 在替换框中 - 如果您放置则用于练习

    1. \1\2\3\4 这什么都不做 :) 只打印从 1.11.4

    2. 的所有组
    3. \2 这样你只能得到1.2

    4. new_thing\2new_thing 在组前后添加您的文本

    5. <a href=blah.com/\2.html>linky study</a> 所以现在添加了您的文本 - 创建链接时单词之间的空格可能会出现问题 - 因此需要使用另一个表达式来替换链接中的所有空格,即_

      李>
    6. 如果您需要将反斜杠添加为文本(或正则表达式使用的其他特殊符号),则必须对其进行转义,因此您将 \\ 用于反斜杠或将 \$ 用于美元符号

想要更多曲调 - <a href=blah.com/\2.html>\2</a> 再次添加 1.2 组 - 或使用任何你想要的

在截图上你可以看到我是如何使用它的(我找到并替换了一行)

好的,然后我们的案例 4.2 末尾带有冒号,因此只需在提取的部分后添加冒号:

将替换从 \2 更改为 \2,

现在你需要加入它,所以最简单的方法是 Edit->Line Operations->Join Lines 但如果你想成为真正的专业人士,请切换到Extended mode(在Replace 窗口中的Regular expression 模式上方)并找到\r\n 并替换为空格。

在某些情况下删除行尾可能会有所不同,但这是另一回事 - 现在我假设您使用的是 windows,因为 Notepad++ 是 windows 工具并且行尾是 windows 样式:)

【讨论】:

  • 感谢您的分解解释,我试图分解它并像您说的那样理解。但是当我在记事本中尝试时,记事本说“找不到任何匹配的文本 ([0-9().]?)(.*)(\s()(.*)”
  • 嘿伙计 - 你在 (\s() 的左括号中省略了转义,所以它应该看起来 (\s\() 另一个解决方法是我在第一个表达式中将 ? 替换为 *
  • 你的答案最多。
  • 你的答案最多。 You solved) Scenario 2 and 4.1。你的解释更容易理解。然而,当我把 \2 放在替换中时,它给了我时髦的输出 - 每行都有S(
  • 现在试试 - 我添加了一些进一步的解释
【解决方案2】:

尝试将^\d+\.(.*) \(\w+\)$ 替换为<a href=blah.com\\\1.htm>linky study</a>

^\d+. 删除了前导数字和点。 (.*) 收集单词。然后是一个空格。 \(\w+\)$ 匹配括号中的最终数字。

新增 Q4 的更新。

正则表达式捕获写在圆括号() 之间的内容。在要搜索的文本中找到的括号必须转义为\(\)。在替换表达式中,\1\2 等被相应的捕获表达式替换。因此,Z(\d+)X([aeiou]+)Y 等搜索表达式可能匹配 Z29XeieiY,然后替换表达式 P\2Q\1R 将插入 PeieiQ29R。在此答案顶部的搜索中,有一个捕获,(.) 捕获或收集单词,然后 \1 将捕获的单词插入替换文本中。

【讨论】:

  • 除了数字 OP 也有括号内的字符。
  • @Pshemo 感谢您发现这一点。将\(\d+\)$ 更改为\(\w+\)$
【解决方案3】:

以下正则表达式应该可以完成这项工作:\d+\.\s*(.*?)\s*\(.*?\)

替换:<a href=example.com\\\1.htm>\1</a>

说明:

  • \d+ :匹配一个数字 0 次或多次。
  • \.:匹配一个点。
  • \s* :匹配空格 0 次或多次。
  • (.*?) :对所有内容进行分组和匹配,直到找到 (
  • \s* :匹配空格 0 次或多次。
  • \(.*?\) :匹配括号和它之间的内容。

替换部分很简单,因为\1 指的是匹配组。

Online demo.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2015-09-10
    • 2021-12-23
    • 2013-11-23
    • 2016-10-07
    • 2019-03-10
    • 2017-08-09
    相关资源
    最近更新 更多