【发布时间】:2019-03-25 22:10:33
【问题描述】:
我正在尝试使用正则表达式修改一些文本。这是原文:
<text xml:lang="en">"Insert Swab to Start Analysis"</text>
<text xml:lang="es"></text>
<text xml:lang="fr"></text>
<text xml:lang="de"></text>
<text xml:lang="pt"></text>
<text xml:lang="du"></text>
这是所需的文字:
<en>"Insert Swab to Start Analysis"</en>
<es>"Insert Swab to Start Analysis"</es>
<fr>"Insert Swab to Start Analysis"</fr>
<de>"Insert Swab to Start Analysis"</de>
<pt>"Insert Swab to Start Analysis"</pt>
<du>"Insert Swab to Start Analysis"</du>
如您所见,有两个变化:修改标签并将源文本复制到目标语言中。
我设法使用两个不同的正则表达式来做到这一点。
第一个正则表达式(将源文本复制到目标语言):
Search: (<text xml:lang=)"en">(.+?)(</text>)\r\n \1"es">\3\r\n \1"fr">\3\r\n \1"de">\3\r\n \1"pt">\3\r\n \1"du">\3
Replace: \1"en">\2\3\r\n \1"es">\2\3\r\n \1"fr">\2\3\r\n \1"de">\2\3\r\n \1"pt">\2\3\r\n \1"du">\2\3
第二个正则表达式(更改标签):
Search: <text xml:lang="(en|es|fr|de|pt|du)">(.*?)(</[^>]*>)
Replace: <\1\>\2</\1>
我对结果非常满意,但我想知道是否所有这些都可以使用单个正则表达式而不是两个来完成。我使用的第二个正则表达式非常优雅,但它不会将源文本复制到不同的目标语言中。我怀疑它需要一个小技巧才能正常工作。有什么建议吗?
PD:我只是使用 Notepad++ 来完成这一切。
PD:这是一个包含许多条目的大型 XML 文件,而不仅仅是我在这里向您展示的那个。
【问题讨论】:
-
如果你的第一个正则表达式适合你(注意这是一个非常脆弱的方法),你可以修改它来完成整个工作。喜欢this。
-
是的,它运作良好,谢谢。
标签: regex search replace notepad++ backreference