63

我有一部分 HTML 源文件,其中包含我想使用 Notepad++ 的正则表达式功能一次选择和复制的字符串。

这是文本源的一部分:

<option value="Performance"
>Performance</option>
<option value="Maintenance"
>Maintenance</option>
<option value="System Stability"
>System Stability</option>

我正在使用正则表达式"[0-9a-zA-Z ]*"来搜索“值”值。我还选择了 Notepad++ 搜索中的功能来突出显示/标记找到的文本。这个工作正常我现在只想将突出显示的文本复制或剪切到剪贴板以进行进一步处理。但我无法在 Notepad++ 中找到此功能。这根本不可能还是我太笨了?

4

10 回答 10

102

从 Notepad++ 5.9 开始,他们为“删除未标记的行”添加了一项功能,该功能可用于删除您不想要的所有内容,并进行一些搜索并替换每个值行上的其他文本。

  1. 使用搜索-->查找-->标记功能来标记您要保留/复制的每一行,并记住在标记文本之前勾选“书签行”
  2. 选择搜索-->书签-->删除未标记的行
  3. 使用 Search-->Find-->Replace 替换您不想保留/复制的其他文本
  4. 保存剩余的文本或复制它。

您也可以使用 Search-->Bookmark-->Copy Bookmarked Lines 来做类似的事情

因此,从技术上讲,您仍然无法复制标记的文本,但您可以将带有标记的文本的行添加为书签,然后对已添加书签或未标记的行执行各种操作。

于 2011-11-22T17:32:43.867 回答
25

我添加这个是为了完整性,因为这篇文章在谷歌搜索结果中排名很高。

您实际上可以从正则表达式搜索中复制所有内容,而不是一步完成。

  1. 使用 Search 下的 Mark 并在 Find What 中输入正则表达式。
  2. 选择书签行并单击全部标记。
  3. 单击搜索 -> 书签 -> 复制带书签的行。
  4. 粘贴到新文档中。
  5. 您可能需要通过搜索和替换删除不属于正则表达式的行中的一些不需要的文本。
于 2012-07-12T19:09:44.807 回答
21

试试这个:

一、修复行尾问题:(Notepad++不允许多行正则表达式)

搜索【扩展模式】:( \r\n>或者自己系统的行尾)

代替: >

然后

搜索【正则表达式模式】: <option[^>]+value="([^"]+)"[^>]*>.*

(如果您想要所有出现value而不仅仅是选项,只需删除前导option

代替: \1

第二个正则表达式的解释:

<option[^>]+     Find a < followed by "option" followed by 
                 at least one character which is not a >

value="          Find the string value="

([^"]+)          Find one or more characters which are not a " and save them
                 to group \1

"[^>]*>.*        Find a " followed by zero or more non-'>' characters
                 followed by a > followed by zero or more characters.

是的,它使用正则表达式解析 HTML——这些警告适用——仔细检查输出。

于 2010-02-19T19:42:33.057 回答
18

这类似于https://superuser.com/questions/477628/export-all-regular-expression-matches-in-textpad-or-notepad-as-a-list

我希望您尝试提取:
“性能”
“维护”
“系统稳定性”

这是方法 - 步骤 1/3:打开 Search->Find->Replace Tab ,选择正则表达式单选按钮。输入 Find what : (\"[a-zA-Z0-9\s]+\") 和 Replace with : \n\1 并单击 Replace All 按钮。 在单击全部替换之前

第 2/3 步:第一步后,您的关键字将位于下一行。(如下图所示)。现在转到标记选项卡并在查找内容中输入相同的正则表达式:字段。在书签线上打勾。然后单击全部标记。 为行添加书签

第 3/3 步:转到搜索 -> 书签 -> 删除未标记的行。删除未标记的行

所以你有如下的最终结果最后结果

于 2018-02-05T09:36:34.360 回答
12

在 Notepad++ 中拥有这将是一个很棒的功能。我使用以下技术从文件中提取所有匹配项:

powershell
select-string -Path input.txt -Pattern "[0-9a-zA-Z ]*" -AllMatches | % { $_.Matches } | select-object Value > output.txt

如果您只想要排序列表中的不同匹配项:

powershell
select-string -Path input.txt -Pattern "[0-9a-zA-Z ]" -AllMatches | % { $_.Matches } | select-object Value -unique | sort-object Value > output.txt
于 2016-10-20T17:58:06.207 回答
3

“复制标记的文本”现在是 Notepad++ 中的内置功能 – 图解答案

我安装的 Notepad++ 版本已经有几年了,我已经关闭了自动更新。将 Notepad++ 更新到最新版本(8.1.1)后,我发现复制标记文本确实是现在支持的功能!

我冒昧地将其作为自己的答案,即使上面有评论试图解释同样的事情。这样我就可以用图片来说明:

在此处输入图像描述

对于相同结果,更长的方法是“全部标记”,然后转到“搜索”菜单。然后选择“复制样式文本/查找样式(标记)”。

于 2021-07-07T06:30:29.547 回答
2

不,从 Notepad++ 5.6.2 开始,这似乎是不可能的。虽然列选择(Alt+Selection)是可能的,但多选显然没有实现,因此搜索功能也不支持。

于 2010-02-19T19:32:46.803 回答
2

Notepad++ v7.9.3 中,它们提供了复制标记文本的选项。转到搜索菜单并选择标记选项..(Ctrl + M) 输入您要查找的内容并单击标记所有选项,然后单击复制标记的文本并粘贴到您想要的任何位置。

您可以在搜索模式下使用正则表达式选项复制多条标记线。

一个简单的例子:假设你正在寻找文字字符串12345,任何地方,一行。

首先,要匹配该特定行的所有内容及其行尾字符,只需使用正则表达式:^.*12345.*\R

其次,要选择:该行和接下来的 10 行的所有内容,请使用正则表达式:^.*12345.*\R(.*\R){10}

该行和前 10 行的所有内容,使用正则表达式:(.*\R){10}^.*12345.*\R

该行的所有内容以及该行之前和之后的 5 行,使用正则表达式:(.*\R){5}^.*12345.*\R(.*\R){5}

注意:对于第三个示例,使用子例程调用到组 1 的另一种语法(?1)是可能的:(.*\R){5}^.*12345.*\R(?1){5}

于 2021-03-11T14:55:19.730 回答
0

我有同样的问题。您可以在新选项卡中列出正则表达式匹配项,在 PSPad 编辑器中的新行中列出每个匹配项,这与 Notepad++ 非常相似。

按 Ctrl + F 进行搜索,检查正则表达式选项,放入正则表达式并单击列表。

于 2013-11-10T10:09:35.297 回答
0

记事本不可能,但这是简单的解决方案

您将需要免费软件 Expresso v3.1 http://www.ultrapico.com/ExpressoDownload.htm

我求助于另一款免费软件:Ultrapico 的 Expresso。

  1. 安装后进入“测试模式”选项卡。
  2. 将您的正则表达式复制到“正则表达式”窗格中。
  3. 将要搜索的整个文本粘贴到 Expresso 的“示例文本”窗格中,

  4. 按“运行匹配”按钮。右键单击“搜索结果窗格”和“导出到...”或“将匹配的文本复制到剪贴板”。

注意:原作者是@Andreas Jansson,但它隐藏在评论中,所以由于这个页面在谷歌搜索中排名很高,我把它留给其他人。

于 2017-07-01T22:00:44.160 回答