对另一个匹配组的内容运行新的正则表达式

时间:2016-03-02 12:32:37

标签: regex regex-lookarounds

希望某种善良的灵魂会对这一点有所了解!

我正在使用支持正则表达式的翻译程序,但我还不知道确切的味道。我希望我的正则表达式首先工作,以便我以后可以请求他们的支持。

这个正则表达式将提取"之间的文本内容。 &#34 ;.有许多特点,但我会保持简单"目前。

1-即使是里面的文字" "有一些"应该保留。

2-只有STRINGTABLE和END之间的文本部分应该按照上面解释的方式提取其内容。例如:

3-忽略包含以#开头的单词的行,因为它们是注释变量。

STRINGTABLE
BEGIN
    IDS_STR_VAR_DEFINE_TIP  "Connect Current Cell to a Defined Variable"
    IDS_STR_DEFINE          "Define"
    #IDS_STR_DEFINE_TIP      "Display Defined Variable Wizard"
    #IDS_STR_UNLINK          "Unlink"
    IDS_STR_UNLINK_TIP      "Remove link to "" a Defined Variable"
    IDS_STR_DELETE          "Delete"
END
BLA BLA BLA "do not want captured"

主要限制:翻译程序只会使用第一个返回组来创建项目。

现在我在这个网站和其他在线资源上进行了一些广泛的研究,并提出了2个独立工作的正则表达式,但我真正需要的是将第一个正则表达式应用于第二个正则表达式的匹配结果。

另一件事:我的翻译程序每个文件只接受1个表达式,所以这必须在1个正则表达式中完成!

第一个正则表达式:

([^"](?:"(.*)")[^"]*$)

仅提取"之间的文字。 "不包括"。在https://regex101.com/中使用PCRE和/ gm修饰符设置效果很好。除了它仍然采用具有以#开头的变量的行。我不知道如何摆脱它们。也许你知道吗?

第二个正则表达式

(STRINGTABLE[\S\s]*?^END)

这个也适用 - 它可以匹配STRINGTABLE和END之间的所有文本,包括行。

我尝试了各种反向跟踪捕获组,但我想我错过了一些东西。正则表达式如下:

(STRINGTABLE[\S\s]*?^END)(?<1>[^"](?:"(.*)")[^"]*$)

(STRINGTABLE[\S\s]*?^END)(\1[^"](?:"(.*)")[^"]*$)

(STRINGTABLE[\S\s]*?^END)\1([^"](?:"(.*)")[^"]*$)

根本不工作。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

你的第一个正则表达式可能是这样的:

\s+\w+\s+([^"](?:"(.*)")[^"]*$)

Regex101 Demo

或试试这个

^\s+\w+\s+"(.*)"$

说明:
^\s+从多个空格开始 \w+文字
\s+多个空格
"(.*)"$捕获“”到“行尾”之间的任何内容

Regex101 Demo