编写一个babel消息解析器和文件扩展名

时间:2017-04-11 11:21:29

标签: python parsing file-extension babel

我想让babel解析一个文件并找出一些简单的翻译字符串:

(_ 

结束于:

)

因此file.myext中的翻译部分可能是:

(_ "message")

字符串文字始终以双引号(“)开头和结尾。

有一些参考文献:http://babel.pocoo.org/en/latest/messages.html?highlight=parser

但这似乎是一件非常复杂的事情。有人可以提供一个简单的例子来为具有上述约束的babel实现自己的消息提取器吗?

我可以从https://github.com/pallets/jinja/blob/99498320871a290f5799d4f96a7774fc8a34381e/jinja2/ext.py

找到Jinja2解析器

但是吧?!

Django项目也有自己的提取器:https://github.com/python-babel/django-babel/blob/master/django_babel/extract.py

1 个答案:

答案 0 :(得分:1)

这些看似复杂的原因是因为他们使用lexical analysis(又名“lexers”)来解析输入并找到字符串。这可能看起来过于复杂,但它是一个非常成熟的计算机科学领域,也是这项工作的正确工具。大多数初学者都会从这种任务的正则表达式和自定义代码开始,如果他们坚持并从可用内容中学习,最终会得到词法分析器和解析器。

根据您自己的定义,您正在寻找:

  1. 左括号(
  2. 下划线_
  3. 零个或多个空白字符(空格,换行符,制表符等)
  4. 双引号"
  5. 您要提取的一些文字
  6. 结束语"
  7. 零个或多个空白字符
  8. 结束括号)
  9. many lexing / parsing libraries in Python这是一个很大的问题,也是介绍这项技术的完美方式。

    您还需要考虑其他一些案例:

    (_ 'single quotes')
    (_ '''multi
          line
          quotes''')
    (_ "strings with \"escaped quotes\".")
    (_ "strings with 'mixed quotes'")
    (_ "strings that are just wrong')