2016-02-04 13 views
5

Şu anda Elm 0.16'da regex kullanarak bir dizede açılış parantezlerini bulmaya çalışıyorum ve bunların her birini bir boşluk ve ardından bir boşluk ile değiştirin. Ayrıca, kapanış parantezlerinin her birini dize içinde bir boşluk ve ardından kapanış parantezi ile değiştirmeyi de planlıyorum. Bu yüzden dizeleri ayırmak için boşlukları virgülle değiştirebilirim. Ben normal ifadeler kullanabilirsiniz çalışıyorum dize buradadır:Elm'de bir dizgedeki parantezleri bulma ve değiştirme 0.16

(! (Veri 123 4.5) (veri (@ # (4.5) "(diğer" "verileri)")) "veri aktardığı")

Alıntılardan kurtulmak için kullanılan ters eğik çizgileri kaldırmak için zaten regex kullanıyorum. Sonra

getRidOfBackslashes : String -> String 
getRidOfBackslashes sExpression = 
    sExpression 
     |> Regex.replace Regex.All (Regex.regex "\\g") (\_ -> "") 

Ben açılış parantez ilişkin geçtiğimiz belirtilen hedefe ulaşmak için aşağıdaki işlevi kullanmaya çalıştı: Farklı JavaScript regex dama benim çok basit regex baktığımızda

createSpacesParentheses sExpression = 
    sExpression 
     |> (\_ -> getRidOfBackslashes sExpression) 
     |> Regex.replace Regex.All (Regex.regex "\(") (\_ -> "(") 

Bunun için ben bu fonksiyonu kullanılır

(line 1, column 3): unexpected "(" expecting space, "&" or escape code 

27│  |> Regex.replace Regex.All (Regex.regex "\(") (\_ -> "(") 
                ^
Maybe <http://elm-lang.org/docs/syntax> can help you figure it out. 

Ben doğru bir şekilde ve herkes olabilir eğer bu konuda gidiyorum, merak ediyorum: istediğimi yapmak görünür henüz Elm derleyici bana hata veriyor Yardım teklif etmek. Şimdiden teşekkürler.

Be careful to escape backslashes properly! For example, "\w" is escaping the letter w which is probably not what you want. You probably want "\\w" instead, which escapes the backslash.

Yani, kolay yolu sadece bir karakter bir karakter sınıfı içinde yer olarak sınıf [(] (tüm "özel" karakterleri ama \, ], ^ kullanmaktır ve - onların kaybetmek:

+0

Kaçma ile ilgili bir sorun varsa, bir karakter sınıfı kullanın: '[(]'. Ama aynı zamanda ikiye katlanabiliyor gibi görünüyorsunuz '(': '\\ (' –

+0

Mükemmel çalıştığınız için çok teşekkür ederim. –

cevap

İlgili konular