2016-05-18 2 views
0

ここは新しく、RegExの新機能です。私は正規表現を使用して、この形式の文字列を日付05-18-16または5-18-16または05 18 16または5 18 16をYYYY MM DD形式に変換しようとしています。RegEx MM DD YYYYからYYYY MM DD

文字列内の日付は、YYまたはYYYYであることに注意してください。

「検索」式は機能していますが、置換に問題があります。私は私が仕事だろうと思ったこのサイト上のいくつかのコードを見つけましたが、結果は常に「1900年1 31」で、2016年05 18" は

Sub StackExPost() 
Dim strIn As String, strReturn As String 
    strIn = "Test 05 09 16 and 5-9-2016 Test" 
    strReturn = fcnRegEx(strIn, "\b(0?[1-9]|1[0-12])(|-)(0?[1-9]|[1-2][0-9]|3[0-1])(|-)((?:\d{4}|\d{2}))", "$5 $3 $1") 
    MsgBox strReturn 'I get get and transpose the components. 
    strReturn = fcnRegEx(strIn, "\b(0?[1-9]|1[0-12])(|-)(0?[1-9]|[1-2][0-9]|3[0-1])(|-)((?:\d{4}|\d{2}))", Format("$5", "YYYY") & " " & Format("$2", "MM") & " " & Format("$1", "DD")) 
    MsgBox strReturn '... but can't apply the formatting. 
End Sub 
Function fcnRegEx(strIn As String, strPattern As String, Optional strReplace As String = vbNullString, Optional bGlobal As Boolean = True) 
Dim objRegex As Object 
Dim objRegM As Object 
    Set objRegex = CreateObject("vbscript.regexp") 
    objRegex.Global = bGlobal 
    With objRegex 
    .IgnoreCase = True 
    .Pattern = strPattern 
    If .Test(strIn) Then 
     Set objRegM = .Execute(strIn) 
     If strReplace = vbNullString Then 
     fcnRegEx = objRegM(0).Value 'submatches(0) 
     Else 
     fcnRegEx = objRegex.Replace(strIn, strReplace) 
     End If 
    Else 
     fcnRegEx = "//No Match\\" 
    End If 
    End With 
lbl_Exit: 
    Exit Function 
End Function 

は読書のためと提供された指導ありがとうございましたではない。

+0

と交換してください?これはexcelとかvbaだと思われるので、unix時にはセルのフォーマットを設定するだけです。 – Andreas

答えて

1

スタートこのパターンを最初

\b(?=\d\b) 

を用いて第1の先行ゼロを追加することによって、および0

Demoと置き換えます

はその後

^(\d+)\D*(\d+)\D*(\d\d)$ 

結果にこのパターンを適用し、UNIXの時刻を使用しないのはなぜ20$3 $1 $2
Demo

+0

Alpha Bravo、ありがとうございます。私は05 09 16のようなもののために働いていますが、私が提供した例はありません。 サブStackExPost()文字列、文字列strReturn strIn = "05 09 16" 'strIn = "テスト05 09 16及び2016年5月9日テスト"' strReturn = fcnRegEx動作しないように(strInとして 薄暗いstrIn (\ d \)\ D *(\ d \ d)$ "、" \ b(?= \ d \ b) "、" 0 ") strReturn = fcnRegEx(strIn、 "20 $ 3 $ 1 $ 2") MsgBox strReturn End Sub –

+0

strReturn = fcnRegEx(strIn、 "^(\ d +)\ D *(\ d +)\ D *(\ d \ d)$"、 "20 $ 3 "$ 1 $ 2") 'を' '$ strReturn(strReturn、" ^(\ d +)\ D *(\ d +)\ D *(\ d \ d)$ "、" 20 $ 3 $ 1 $ 2 "最初の結果の2番目のパターン。 –

関連する問題