[英]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.