2009-09-07 192 views
1

假設我有一個字符串,如下列:我怎樣才能用正則表達式來標記這個?

OneTwo 
ThreeFour 
AnotherString 
DVDPlayer 
CDPlayer 

我知道如何來標記駝峯的,除「DVD播放機」和「CD播放器」。我知道我可以手動記號化它們,但也許你能告訴我一個正則表達式,可以處理所有的情況?

編輯: 預期令牌是:

OneTwo -> One Two 
... 
CDPlayer -> CD Player 
DVDPlayer -> DVD Player 
+1

那你在這種情況下會發生什麼記號? – Gumbo 2009-09-07 12:05:31

+1

一,二;三四;另外,字符串; DVD播放機; CD,播放器 – Joey 2009-09-07 12:07:10

回答

4

看我對這個問題,.NET - How can you split a 「caps」 delimited string into an array?答案。

正則表達式如下:

/([A-Z]+(?=$|[A-Z][a-z])|[A-Z]?[a-z]+)/g 

它可以通過更換被稍微修改,以便尋找駱駝套管令牌時,$\b

/([A-Z]+(?=\b|[A-Z][a-z])|[A-Z]?[a-z]+)/g 
+0

後者幾乎等同於Gumbo的答案。唯一的區別是,這也接受以小寫開頭的單詞。 「camelCase」 - > [「camel」,「Case」] – 2009-09-07 12:21:45

0

嘗試提前一非貪婪的樣子。令牌可以是一個或多個大寫字符,後跟零個或多個小寫字符。在接下來的兩個字符是一個大寫和小寫的令牌將終止 - 匹配這部分是可以使用什麼非貪婪匹配。這種方法有侷限性,但它應該適用於您提供的示例。

+0

+1,因爲你先到那裏 - 儘管我猜想一個例子可能會把你推到「有幫助」的排名:) – 2009-09-07 14:17:51

4

試試這個正則表達式:

[A-Z](?:[a-z]+|[A-Z]*?(?=[A-Z][a-z]|\b)) 
1

正則表達式

([A-Z]+[a-z]*)([A-Z][a-z]*) 

會做你想要的,假設你所有的字符串都是2個字長,第二個字不像DVD。

I.e.它會適用於你的例子,但也許不適合你實際想要做的事情。

1

這裏是我的嘗試:

([A-Z][a-z]+)|([A-Z]+(?=[A-Z][a-z]+)) 
相關問題