代码之家  ›  专栏  ›  技术社区  ›  swiss_knight

在po文件中使用regexp查找所有非空或多行的msgstr

  •  0
  • swiss_knight  · 技术社区  · 2 年前

    在.po文件中,我可以使用什么regexp来查找所有 msgstr 行为

    msgstr "some text"
    

    或者分布在多条线上:

    msgstr ""
    "some multiline text"
    "goes here"
    

    但不是空的:

    msgstr ""
    

    ?

    目前我使用的是:

    (msgstr "[\D\s]+")|(msgstr ""[\n\D\s]+")
    

    但它并没有完全起作用。

    1 回复  |  直到 2 年前
        1
  •  3
  •   The fourth bird    2 年前

    如果以下所有行都应以至少一个字符的双引号开头:

    ^msgstr (?:"[^"\r\n]+"|.*(?:\n"[^\r\n"]+")+)
    

    模式匹配:

    • ^ 字符串的开头
    • msgstr 按字面匹配
    • (?: 2个备选方案的非捕获组
      • "[^"\r\n]+" 从开头到结尾至少使用一个非双引号或换行符的字符进行匹配
      • |
      • .* 匹配整条线
      • (?:\n"[^\r\n"]+")+ 使用除双引号或换行符以外的至少一个字符重复匹配1行或多行
    • ) 关闭非捕获组

    Regex demo

    如果以下行也可以为空:

    ^msgstr (?:"[^"\r\n]+"|.*(?:\n".*")+)
    

    Regex demo