从相同字符对之间的文本中剥离字符串(使用正则表达式或其他方式)
Strip strings from text between idential pairs of characters (using regex or otherwise)
我有很长的文本文件(实际上是 .srt 字幕文件)- 不幸的是,其中包含很多 irrelevant/distracting 信息。
所有不相关的文本都包含在相同的 pilcrow(段落)字符对中:¶
因此,例如,一些文本将如下所示:
This is important, and ¶junk trash garbage rubbish¶ I would like to
keep it.
显然,我想删除 ¶ 字符之间的所有内容并保留其余部分。 ¶ 字符本身是被剥离还是被保留并不重要:如果它们被保留,直接用后续的 search/replace 删除它们是微不足道的 - 所以我只需要最简单的模式匹配。
请注意,¶ 符号是成对出现的,因此它并不像删除 [不对称字符] 之间的所有内容那样简单。
我不在任何特定平台上工作。事实上,我希望使用基于网络的工具来完成它like this one。
我只需要正则表达式 - 如果有人可以提供帮助!或者,如果有比正则表达式更好的方法,我将不胜感激。
编辑:有人建议这个问题 (Remove text in-between delimiters in a string (using a regex?)) 回答我正在寻找的问题。谢谢,但不幸的是它没有。这与在 C# 中使用它有关(我不知道),并且该问题的答案并未准确解释如何复制我想要的内容。我希望它在我链接到的在线工具中工作。
更新: 一个好的答案有效,但前提是不需要的文本出现在行内。我还需要它来删除不需要整行的文本:
779 00:35:52,216 --> 00:35:54,784
I miss him already.
780 00:36:00,291 --> 00:36:03,727
¶ If you ever need someone ¶
665
00:30:21,821 --> 00:30:25,589
¶ Feels like
sometimes you want to ¶
所以我想删除出现在 ¶ 符号之间的所有内容,不管它们在行中的什么位置,也不管是否存在换行符。
第二次更新
在接受的答案之后,它似乎并不完全有效。在示例 here 中,提供的正则表达式在第一个多行实例中不起作用。我不知道出了什么问题。我只是希望换行符(或任何其他字符)与考虑无关。该请求只是删除一对 ¶ 字符之间的所有内容,无论它们出现在哪里,也不管它们之间还有什么。
最终(希望)更新
供参考,感谢用户 MDR,我们有解决方案:(¶[\S\s]*?¶)
由于问题中的新信息和此答案下方的评论而更新。
您引用的在线工具似乎可以提取文本(可能不是您想要的 - 您想要删除找到的位)。也许改用本地文本编辑器(xed、Gedit、Textedit、TextWrangler、Visual Code Studio、Atom、Windows 上的 NotePad++ 等),它具有查找和替换功能,但带有正则表达式选项并查找...
(¶[\S\s]*?¶)
...并替换为空。演示:https://regex101.com/r/4v9gXj/8
如果我可以建议 regexr.com。使用模式 ¶.*?¶
,然后切换到 替换 部分,如屏幕截图所示。
我有很长的文本文件(实际上是 .srt 字幕文件)- 不幸的是,其中包含很多 irrelevant/distracting 信息。
所有不相关的文本都包含在相同的 pilcrow(段落)字符对中:¶
因此,例如,一些文本将如下所示:
This is important, and ¶junk trash garbage rubbish¶ I would like to keep it.
显然,我想删除 ¶ 字符之间的所有内容并保留其余部分。 ¶ 字符本身是被剥离还是被保留并不重要:如果它们被保留,直接用后续的 search/replace 删除它们是微不足道的 - 所以我只需要最简单的模式匹配。
请注意,¶ 符号是成对出现的,因此它并不像删除 [不对称字符] 之间的所有内容那样简单。
我不在任何特定平台上工作。事实上,我希望使用基于网络的工具来完成它like this one。
我只需要正则表达式 - 如果有人可以提供帮助!或者,如果有比正则表达式更好的方法,我将不胜感激。
编辑:有人建议这个问题 (Remove text in-between delimiters in a string (using a regex?)) 回答我正在寻找的问题。谢谢,但不幸的是它没有。这与在 C# 中使用它有关(我不知道),并且该问题的答案并未准确解释如何复制我想要的内容。我希望它在我链接到的在线工具中工作。
更新: 一个好的答案有效,但前提是不需要的文本出现在行内。我还需要它来删除不需要整行的文本:
779 00:35:52,216 --> 00:35:54,784
I miss him already.
780 00:36:00,291 --> 00:36:03,727
¶ If you ever need someone ¶
665
00:30:21,821 --> 00:30:25,589
¶ Feels like
sometimes you want to ¶
所以我想删除出现在 ¶ 符号之间的所有内容,不管它们在行中的什么位置,也不管是否存在换行符。
第二次更新 在接受的答案之后,它似乎并不完全有效。在示例 here 中,提供的正则表达式在第一个多行实例中不起作用。我不知道出了什么问题。我只是希望换行符(或任何其他字符)与考虑无关。该请求只是删除一对 ¶ 字符之间的所有内容,无论它们出现在哪里,也不管它们之间还有什么。
最终(希望)更新
供参考,感谢用户 MDR,我们有解决方案:(¶[\S\s]*?¶)
由于问题中的新信息和此答案下方的评论而更新。
您引用的在线工具似乎可以提取文本(可能不是您想要的 - 您想要删除找到的位)。也许改用本地文本编辑器(xed、Gedit、Textedit、TextWrangler、Visual Code Studio、Atom、Windows 上的 NotePad++ 等),它具有查找和替换功能,但带有正则表达式选项并查找...
(¶[\S\s]*?¶)
...并替换为空。演示:https://regex101.com/r/4v9gXj/8
如果我可以建议 regexr.com。使用模式 ¶.*?¶
,然后切换到 替换 部分,如屏幕截图所示。