2012-03-22 50 views
0

我有一個像2005:10:29 12:23:53一個字符串,我希望與-正則表達式匹配一個字符只被n次出現在一個字符串

預期結果,以取代:只有前兩個出現2005-10-29 12:23:53

編輯:

我需要這個正則表達式在KDE的krename工具,我不能編輯/格式原始[exifExif.Image.DateTime]女巫返回不需要的2005:10:29 12:23:53格式,但有一個Find and Replace後處理字符串

(?<=\d{4}):|:(?=\d{2}\s)做工作on rubular,但在KDE不:(

我相信有更多的解決方案。

編輯:

:(?=\d{2}:\d{2}\s)|:(?=\d{2}\s)作品甚至在KDE

我發現這個解決方案在我讀Regex tutorial

You can use a full-fledged regular expression inside the lookahead. 
Most regular expression engines only allow literal characters and 
alternation inside lookbehind, since they cannot apply regular 
expression backwards. 

+0

所以你想用什麼語言?你剛剛刪除了JavaScript和Ruby ... – mplungjan 2012-03-22 10:24:44

+0

哪種語言? – hochl 2012-03-22 10:24:55

+0

我編輯了這個問題 – kfl62 2012-03-22 10:32:48

回答

1

的JavaScript:

版本1

str = str.split(' ')[0].replace(/\:/g,'-')+' '+str.split(' ')[1] 

2版

str = str.replace(/(\d{4}):(\d{2}):(\d{2})(.*)/,"$1-$2-$3 $4") 

DEMO

+0

對不起,我把它們混淆了(javascript,ruby) – kfl62 2012-03-22 10:24:14

+0

+1正常工作JavaScript和很高興知道DEMO鏈接:) – kfl62 2012-03-22 18:23:24

-1

再次使用,可以以更簡單,更優雅,更有效的方式來實現

var date = new Date('2005:10:29 12:23:53'); 

然後進行格式化的東西正則表達式相應地,例如,date

function formatDate(date){ 

    return date.getFullYear() + '-' + (get.getMonth() + 1) + '-' + ... ; 

} 
+0

如果允許使用日期功能yyyy:mm:dd hh:mm:ss,那就太好了,但它不會。所以你需要首先改變第一組:到 - 這是OP想知道怎麼做 – mplungjan 2012-03-22 10:19:29

+0

對不起,混淆標籤我刪除它們(javascript,ruby) – kfl62 2012-03-22 10:23:02

3

在Ruby中,正如scibuff所暗示的,您可能最好不要使用Regexps。

require 'date' 
date = DateTime.parse("2005:10:29 12:23:53", "%Y:%m:%d %H:%M:%S") 
date.strftime("%Y-%m-%d %H:%M:%S") 
+0

抱歉混淆標籤我刪除它們(javascript,ruby)+ 1爲紅寶石溶液。 – kfl62 2012-03-22 10:24:23

-1

直接讓replace()兩次:

"2005:10:29 12:23:53".replace(/:/,'-').replace(/:/,'-') 
相關問題