簡體   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