如何在Camel Case中使用特殊大写单词拆分单词?

问题描述

我正在尝试使我的深度学习模型的配置名称更易于理解。我要做的第一件事是将配置名称拆分为令牌。
输入就像:

allow-nonxdr-writes
io.native.lib.available
ha.zookeeper.parent-znode
min_file_size
ProxyStatus
ProxyFCGIBackendType
SessionDBDCookieRemove
DBDriver
SSLOCSPDefaultResponder

相应的输出应为:

allow nonxdr writes
io native lib available
ha zookeeper parent znode
min file size
Proxy Status
Proxy FCGI Backend Type
Session DBD Cookie Remove
DB Driver
SSL OCSP Default Responder

如上所示,配置名称的格式各不相同(因为它们来自不同组织的不同软件)。对于前四个名称,可以使用.-_之类的分隔符来分割它们。最后五个对我来说很难。如果仅由Camel-Case负责人使用大写字母开头的单词来拆分这些名称,则具有特殊含义的单词(例如FCGIDBDDB)可能会错误地拆分。

是否有适合解决此问题的良好做法?手动构建字典是解决此问题的唯一方法吗?

顺便说一句。这种情况仅在处理Apache Httpd中的配置名称时发生。

解决方法

以下正则表达式模式似乎越来越接近:

[-._]|(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])

说明:

[-._]                     split on -,.,or _
|                         OR
(?<=[a-z])(?=[A-Z])       split when lowercase precedes and uppercase follows
|                         OR
(?<=[A-Z])(?=[A-Z][a-z])  split when uppercase precedes followed by upper-lower

Demo

唯一不符合您期望的测试输入是:

SSLOCSPDefaultResponder

我的正则表达式给出:

SSLOCSP Default Responder

这样做的原因是,没有明确的规则可以使我们知道SSLOCSP之间应该有一个中断。如果您希望采用这种逻辑,则可能需要保留一个已知“单词”的词典,并在该词典周围进行其他拆分。