使用正则表达式从带有 CamelCase 的文本生成搜索词
generate search words from text with CamelCase by using regEx
我想从此文本中生成带有 CamelCase 搜索词。
我不知道这是否仅适用于 RegEx。但我已经很接近了。
我在脚本语言中使用它 AutoHotkey (https://autohotkey.com/docs/misc/RegEx-QuickRef.htm) .
数据:推荐用于未来的 AutoHotkey 版本。
regEx: (((\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})
来自 Splitting CamelCase with regex
(([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
我制作了一个几乎可以满足您需要的正则表达式。但是,我缺少一种组合。我不认为,这是可能的,因为它需要括号重叠,'Hotkey'
必须属于两个不同的重叠组。
嗯,这是正则表达式:
/\b((\w+?(?=[A-Z]|\b))([A-Z][a-z]*)?)([A-Z][a-z]*)?/g
它以一个单词 boundary
开始,然后创建 2 个组,Group 2
匹配任何 Word
字符一次或多次(不贪心)直到 look ahead
一个到达 Capital
个字母或单词 boundary
。
第 3 组将匹配 Capital
个字母后跟零个或多个 lowercase
个字母。那是可选的。
Group 1
结合了 Group 2
和 Group 3
.
最后 Group 4
将匹配一个 Capital
字母后跟零个或多个 lowercase
字母。那是可选的。
如前所述,我认为不可能创建一个组合第 3 组和第 4 组的组,因为它们重叠。除此之外,这应该可以,如您所愿。
我想从此文本中生成带有 CamelCase 搜索词。 我不知道这是否仅适用于 RegEx。但我已经很接近了。 我在脚本语言中使用它 AutoHotkey (https://autohotkey.com/docs/misc/RegEx-QuickRef.htm) .
数据:推荐用于未来的 AutoHotkey 版本。
regEx: (((\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})
来自 Splitting CamelCase with regex
(([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
我制作了一个几乎可以满足您需要的正则表达式。但是,我缺少一种组合。我不认为,这是可能的,因为它需要括号重叠,'Hotkey'
必须属于两个不同的重叠组。
嗯,这是正则表达式:
/\b((\w+?(?=[A-Z]|\b))([A-Z][a-z]*)?)([A-Z][a-z]*)?/g
它以一个单词 boundary
开始,然后创建 2 个组,Group 2
匹配任何 Word
字符一次或多次(不贪心)直到 look ahead
一个到达 Capital
个字母或单词 boundary
。
第 3 组将匹配 Capital
个字母后跟零个或多个 lowercase
个字母。那是可选的。
Group 1
结合了 Group 2
和 Group 3
.
最后 Group 4
将匹配一个 Capital
字母后跟零个或多个 lowercase
字母。那是可选的。
如前所述,我认为不可能创建一个组合第 3 组和第 4 组的组,因为它们重叠。除此之外,这应该可以,如您所愿。