记事本++中括号的正则表达式

Posted

技术标签:

【中文标题】记事本++中括号的正则表达式【英文标题】:RegEx for bracket in Notepad++ 【发布时间】:2016-01-29 17:06:22 【问题描述】:

我正在尝试在 notepad++ 中创建一个特殊的 RegEx 函数来修复一些最初为 Softni 格式的字幕 txt 文件,这些文件使用方括号作为斜体命令的特殊字符。这些文件最初是为 Softni 产品设计的,但当它们用于其他字幕应用程序时,并非所有命令都能正常工作。

在 Softni 格式中,斜体通过在应该是斜体的文本周围放置“[”和“]”来工作,如下所示:

This text has an [italic expression]

当斜体应用于行时,只需要在行首放置一个括号(可以使用“]”结束括号,也可以不使用)。

[This entire line is in italic

当字幕有两行时,斜体可以从开头一直延伸到第二行的结尾,或者如果有一个右括号指示斜体的结尾。

Line 1 with normal text and [italic text
that extends for the whole sencond line

Line 1 with some [italic text
that extends to some portion] of line 2

[Line 1 is in italic
and line 2 is in italic

如您所见,对于某些行,有一个以斜体开头的命令,但该命令没有结束字符(应该是“]”) 在Two line的情况下,有时第二行不以“[”开头,说明它们已经以斜体开头。

使用 RegEx,我尝试始终为所有行指定斜体的开始和结束。由于斜体可能在一行中多次开始和/或结束,RegEx 应该考虑到这一点。

[Italic word], normal text, [italic again

对于上述情况,我能够通过以下命令识别模式:

^.*\[(?!.*\]).*$

如果进行适当的更改,这条线会变成这样

[Italic word], normal text, [italic again]

但是,我找不到以下示例的正则表达式:

second line with text in italic], normal text,[and another italic text].

有人知道吗?我可以使用正则表达式,其中涉及两行,例如这一行

(^(?!.*\].*).*\[.*)(\r\n)(^(?!.*\[.*).*\])

但如果我能在没有这种特殊需要的情况下实现这一点,它会提供更好的代码。

【问题讨论】:

如果您可以将示例与必须匹配的部分组合在一起,将会很方便。你可以试试^[^\]\[\n]*(?:\r?\n[^\]\[\n]*)?\]|\[[^\]\[\n]*(?:\r?\n[^\]\[\n]*)?\]? 【参考方案1】:

您可以使用带有一些技巧的否定字符类来限制它与一行和下一行一起使用,并使用 2 种替代方法,因为您想匹配 ] 的互斥位置:

^[^\]\[\n]*(?:\r?\n[^\]\[\n]*)?\]|\[[^\]\[\n]*(?:\r?\n[^\]\[\n]*)?\]?

由于? 量词,最后一个] 是可选的。

【讨论】:

如果您的斜体文本超过 2 行(尽管您的示例另有说明)并且它们的数量未知,则此方法将不起作用。 确实可以找到用方括号括起来的上述句子(甚至在两行之间)。不幸的是,我无法使用完整的代码,因为有时我需要找到具有上述条件的句子,但同时代码允许我选择必要的部分并将其替换为必要的封闭方括号。 例如,我能够找到以下条件:'Line 1 with normal text and [italic text that extends for the whole sencond line 但我无法将其替换为以下模式:'Line 1 with normal text and [italic text] [that extends for the whole sencond line]

以上是关于记事本++中括号的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

怎么用正则表达式匹配小括号里内容(含括号)?

正则表达式如何匹配提取括号中的内容

怎么用正则表达式匹配中括号内的字符

js 正则表达式获取小括号内的内容,不含括号

如何用正则表达式匹配括号中的内容。

怎么通过正则表达删除含中文的括号部分但保留含英文的括号部分?