【发布时间】:2020-03-22 12:05:08
【问题描述】:
假设我有一个由多个单词组成的字符串。这些单词没有用空格分隔,但每个单词都以大写字母开头。这种类型的命名约定通常称为“驼峰式”。一些例子:
- 应用记录
- 驼峰式
- FirstNumberAfterACharacter
现在我想将这些字符串拆分为单个单词,例如,FirstNumberAfterACharacter 变为 ["First", "Number", "After", "A", "Character"]。
找到匹配这些字符串的正则表达式也很容易:^([A-Z][a-z]*)+$。
但是如果我尝试获取所有匹配项,这个正则表达式只会返回最后一个匹配项:
irb(main):003:0> /^([A-Z][a-z]*)+$/.match('FirstNumberAfterACharacter').captures
=> ["Character"]
irb(main):004:0> 'FirstNumberAfterACharacter'.scan(/^([A-Z][a-z]*)+$/)
=> [["Character"]]
那么我如何获得所有匹配项,而不仅仅是最后一个?
【问题讨论】:
-
重复捕获组将仅捕获最后一次迭代。如果您知道字符串的格式,则可以匹配所有没有锚点
[A-Z][a-z]*的匹配项。 -
很遗憾我不知道字数。
-
我不懂 Ruby,但这是你想要的吗? regex101.com/r/0nZEev/1
-
@Thefourthbird 是对的,你不必知道字数;
scan负责这一点。p 'FirstNumberAfterACharacter'.scan(/[A-Z][a-z]*/) # =>["First", "Number", "After", "A", "Character"] -
@steenslag:啊啊。谢谢你。这就是我一直在寻找的。span>