繁体   English   中英

如何使用正则表达式提取驼峰式字符串的所有单词?

[英]How to extract all words of a camel cased string with a regular expression?

假设我有一个由多个单词组成的字符串。 这些词没有用空格分隔,但每个词都以大写字母开头。 这种命名约定通常称为“驼峰命名法”。 一些例子:

  • 申请记录
  • 骆驼香烟盒
  • 第一个数字后一个字符

现在我想将这些字符串拆分成单个单词, FirstNumberAfterACharacter变成["First", "Number", "After", "A", "Character"]

找到匹配这些字符串的正则表达式也很容易: ^([AZ][az]*)+$ 但是如果我尝试获取所有匹配项,这个正则表达式将只返回最后一个匹配项:

irb(main):003:0> /^([A-Z][a-z]*)+$/.match('FirstNumberAfterACharacter').captures
=> ["Character"]

irb(main):004:0> 'FirstNumberAfterACharacter'.scan(/^([A-Z][a-z]*)+$/)
=> [["Character"]]

那么我如何获得所有匹配项,而不仅仅是最后一个匹配项?

我将您的正则表达式更改为:

以由单个大写字母组成的组(...)开头: [AZ]{1} ,后跟零个或多个大写字母[^AZ]*

'FirstNumberAfterACharacter'.scan(/([A-Z][^A-Z]*)/).flatten(1)

您可以使用正则表达式提取任何类型的 Unicode 大写字母,后跟任何非大写字母:

'FirstNumberAfterACharacter'.scan(/\p{Lu}\P{Lu}*/)
# => ["First", "Number", "After", "A", "Character"]

请参阅Ruby 在线演示

详情

  • \p{Lu} - 任何 Unicode 字母
  • \P{Lu}* - 除 Unicode 个字母外的零个或多个 ( * ) 个字母。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM