如何用正则表达式匹配.po文件中非空或多行的msgstr?
匹配.po文件中非空msgstr的正则表达式
针对需求,这里提供能准确匹配单行/多行非空msgstr、排除空msgstr ""的正则方案:
通用正则表达式(支持多行匹配的引擎)
msgstr\s*(?:"[^"]+"|""(?:\n\s*"[^"]+")+)
正则解析
msgstr\s*: 匹配msgstr关键字,允许后面跟任意空白字符(空格、制表符)(?:"[^"]+"|""(?:\n\s*"[^"]+")+): 分支匹配两种非空场景:"[^"]+": 匹配单行非空内容,[^"]+确保引号内至少有一个非引号字符""(?:\n\s*"[^"]+")+: 匹配多行格式,""对应多行开头的空引号,(?:\n\s*"[^"]+")+确保至少有一行带内容的引号行,避免匹配空的多行声明
进阶优化版(避免误匹配)
如果你的正则引擎支持负向断言,可使用更精准的版本:
msgstr\s*""(?:\n\s*"[^"]+")+|msgstr\s*"[^"]+"(?!")
这个版本通过(?!")确保单行匹配不会误触多行开头的msgstr "",适合复杂的.po文件场景。
匹配示例
- 会被匹配的内容:
- 单行:
msgstr "Hello, Translation" - 多行:
msgstr "" "This is a multi-line " "translation text."
- 单行:
- 不会被匹配的内容:
msgstr ""
内容的提问来源于stack exchange,提问作者swiss_knight
相关产品推荐
相关产品推荐

