2016-10-05 57 views
0

目前我有一个基于文本的文件,这些文件的某些部分是这样的:如何搜索多行并将这些倍数行替换到位?

\#:some comment 
msgid "" 
"CCCCC" 
msgstr "" 

\#: some comment 
msgid "" 
"CCCCC" 
"DDDDD" 
msgstr "" 

\#:some comment 
msgid "" 
"CCCCC" 
"DDDDD" 
"EEEEE" 
msgstr "" 

而且我有一个正则表达式msgid ""(([^\n#])*(\n+))+msgstr ""以匹配所有这些线路除了评论。

我的最终目标是要找到任何字符串或之后MsgId和替换他们msgstr

像:

\#:some comment 
msgid "" 
"CCCCC" 
msgstr "" 
"CCCCC" 

\#: some comment 
msgid "" 
"CCCCC" 
"DDDDD" 
msgstr "" 
"CCCCC" 
"DDDDD" 

\#:some comment 
msgid "" 
"CCCCC" 
"DDDDD" 
"EEEEE" 
msgstr "" 
"CCCCC" 
"DDDDD" 
"EEEEE" 

所以,当利用搜索和正则表达式替换,$ 1只匹配的最后一行的每个组。我希望$ 1可以匹配msgid和msgstr之间的字符串,以便它可以在msgstr之后被替换。

任何建议都会非常有帮助!

+0

尝试将所有行附加到单个字符串(如果是java)并匹配正则表达式以提取该字符串中的所有匹配。 – Akhil

+0

你正在使用什么风味正则表达式?你在(perl,sed,awk,javascript)中使用它们是什么?你想添加一些相应的标签吗? – Yunnosch

回答

0

这是一个sed演示器sed -En ":a;N;$!ba;s/msgid \"\"((([^\n#])*(\n+))+)msgstr \"\"/--\1--/g;l"。 不知道更多你的环境,我选择了这个测试。
你不需要sed,这只是为了展示我测试的内容和方式。

  • 它具有逃脱"
  • 特技是添加另一捕捉组包括当前(...)+
    这是因为位置仍然\1
  • 演示器包围匹配字符串在“ - ”中,以显示匹配的内容,这是我明白你想要的
  • 评论仍然存在,因为它们不是matc建置
  • MSGID,msgstr等不输出,因为它们是匹配的,像你的正则表达式也做

对于给定的样本输入它给人的输出:

\#:some comment 
-- 
"CCCCC" 
-- 

\#: some comment 
-- 
"CCCCC" 
"DDDDD" 
-- 

\#:some comment 
-- 
"CCCCC" 
"DDDDD" 
"EEEEE" 
-- 

正则表达式在你的味道是(我猜)
msgid ""((([^\n#])*(\n+))+)msgstr ""

让我知道哪些语言/工具/风味您使用,让我看看你的代码(不只是正则表达式),我将答案适应更多closel Ÿ适合您的需求。
你说你想匹配msgid和msgstr之间的文本。我读到了包含带有msg * NOT的""与匹配的文本。这与期望的输出不匹配。
如果需要输出比描述更重要,我也可以改变它,但除了你的正则表达式之外,我需要你的代码。