2013-06-18 23 views
0

我想運行信息將在這兩個類型中的表達的字符串:什麼是基於字符數創建組的正則表達式?

2012-11即YYYY-MM

11-2012即毫米-YYYY

我想寫一個正則表達式構建格式的字符串:

(正則表達式組1) - (正則表達式組2)

這樣group1總是yyyy部分而group2是mm。

我想寫這個函數來將日期格式標準化爲單個yyyy-mm類型。

可以用正則表達式來解決這個問題嗎?

+1

你試過了什麼?請放一些代碼,以便其他人很容易理解 – Priyanka

+0

@Priyanka。我可以詳細說明問題不清楚。 – sul4bh

回答

3

如果你可以使用向前看符號,你也許可以用這樣的:

(?=.*(\b\d{4}\b))(?=.*(\b\d{2}\b)).* 

而且通過更換:

\1-\2 

(或$1-$2

here

+3

環視的好用法,+1。 – Toto

+0

我不認爲我完全理解它。但這令人印象深刻。 – sul4bh

+1

@ sul4bh前瞻'(?= ...)'尋找前面的角色。第一個先行,'(?=。*(\ b \ d {4} \ b))'查找一個4位數字,並將其捕獲到第一個組中:'\ 1'; '(?=。*(\ b \ d {2} \ b))'會查找一個2位數字並將其捕獲到第二組中:'\ 2'。用\ \ \ \ \ \ \ \ \ \替換被捕獲的組到您需要的格式:) – Jerry

1

滿足:\b(?:(\d{4})-(\d{2})|(\d{2})-(\d{4}))\b

替換:$1$4-$2$3

如果一個基團不參加的比賽,在替換串中的任何參考該組被當作一個空字符串。因此,與#4組連接的組#1將始終爲年,與#3組連接的組#2將始終爲月份。

這裏假設您使用您的語言的正則表達式替換機制,如PHP的preg_replace()或Java的replaceAll()。如果您使用(例如)Java的group(n)方法,則將非參與組作爲空值返回,並在將它們分配給字符串變量時將其轉換爲單詞null。因此,像

String year = m.group(1) + m.group(4); 

...的轉讓將導致2011nullnull2011。大多數語言都比這更聰明,但這是你應該注意的。

+0

這是非常簡單易懂的。謝謝。 – sul4bh

相關問題