如何拆分带有特殊大写单词的 Camel Case 中的单词?

How to split words in Camel Case with special capital words inside?

我正在努力使我的深度学习模型的配置名称更容易理解。我应该做的第一件事是将配置名称拆分为标记。
输入如下:

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

如上所示,配置名称的格式各不相同(因为它们来自不同组织的不同软件)。对于前 4 个名称,可以使用 .-_ 等分隔符将它们分开。最后五个对我来说很难处理。如果我仅按驼峰命名法原则拆分这些名称,其中单词以大写字母开头,则具有特殊含义的单词如 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 之间应该发生中断。如果你想要那个逻辑,你可能需要保留一个已知“单词”的字典,围绕它应该有额外的拆分。