首页 > 解决方案 > 使用正则表达式从带有 CamelCase 的文本中生成搜索词

问题描述

我想从这个文本中用 CamelCase 搜索词来生成。我不知道这是否仅适用于 RegEx。但我已经很接近了。我在脚本语言 AutoHotkey ( https://autohotkey.com/docs/misc/RegEx-QuickRef.htm ) 中使用它。

数据:推荐用于未来的 AutoHotkeyReleases。

正则表达式:(((\b[^A-Z\s]*)?([A-Z][a-z]+)|([\W_-]?[a-z]+)))https://regex101.com/r/NgRmXZ/2

预期组:

reCommended 
re
Commended 
for
future
Auto
Hotkey
AutoHotkey
HotkeyReleases
Releases
AutoHotkeyReleases.

我也尝试过,但对我不起作用:

(?=\p{Lu}\p{Ll})|(?<=\p{Ll})(?=\p{Lu})使用正则表达式拆分 CamelCase

(([a-z]*)(?<=[a-z])((?:[A-Z])[a-z]+)) https://regex101.com/r/NgRmXZ/3

(?<=[a-z])([A-Z])|(?<=[A-Z])([A-Z][a-z]) https://regex101.com/r/NgRmXZ/4

((?<!^)([A-Z][a-z]+|(?<=[a-z])[A-Z][a-z]+)) https://regex101.com/r/B5vXaZ/1

我已经开始在这里实现我的原型了: https ://gist.github.com/sl5net/ba5aef19f44fe68204ccb6c96e7c96e0

标签: regexautohotkey

解决方案


我制作了一个几乎可以满足您需求的正则表达式。但是,我缺少一种组合。我不认为,这是可能的,因为它需要括号重叠,'Hotkey'必须是两个不同重叠组的一部分。

好吧,这是正则表达式:

/\b((\w+?(?=[A-Z]|\b))([A-Z][a-z]*)?)([A-Z][a-z]*)?/g

它由一个 Word 开始boundary,然后创建 2 个组,Group 2匹配任何Word字符一次或多次(不贪婪),直到达到 a look aheadfor a Capitalletter OR a Word boundary

第 3 组将匹配一个Capital字母后跟零个或多个lowercase字母。那是可选的。

Group 1结合Group 2Group 3

finallyGroup 4将匹配一个Capital字母后跟零个或多个lowercase字母。那是可选的。

如前所述,我认为不可能创建一个组合第 3 组和第 4 组的组,因为它们重叠。除此之外,这应该如你所愿。


推荐阅读