2016-02-04 11 views
5

Obecnie próbuję znaleźć nawiasy otwierające w łańcuchu, używając wyrażenia regularnego w Wiązach 0.16 i zastąpić je nawiasem, a następnie spacji. Zamierzam również zastąpić każdy z nawiasów zamykających w ciągu znaków spacją, po której następuje nawias zamykający. Dzięki temu mogę zastąpić spacje przecinkiem, aby oddzielić ciąg znaków. Ciąg Próbuję użyć wyrażenia regularnego na jest tutaj:Znajdowanie i zastępowanie nawiasów w ciągu w wiązach 0.16

((dane "cytowany danych" 123 4.5) (dane (@ # (4,5) "(więcej" "danych)"))!)

Użyłem już wyrażenia regularnego, aby usunąć ukośniki odwrotne używane do uniknięcia cudzysłowów. Do tego użyłem tej funkcji:

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

Potem próbowałem korzystać z następujących funkcji w celu osiągnięcia wcześniej wyznaczonego celu w zakresie nawiasach otwarcia:

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

Patrząc na różnych javascript regex warcaby mój bardzo proste regex wydaje się robić to, co chcę, ale kompilator Elm daje mi błąd:

(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. 

Zastanawiam się, czy mam zamiar o tym w odpowiedni sposób i czy ktoś mógłby zaoferować pomoc. Z góry dziękuję.

+0

Jeśli występuje problem z ucieczką, użyj klasy znaków: '[(]'. Ale wydaje się, że możesz również podwójnie uciec przed '(': '\\ (' –

+0

Dziękuję bardzo, że działało idealnie. –

Odpowiedz

4

Zobacz this reference:

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.

więc w prosty sposób jest po prostu użyć klasy znaku [(] (jak wewnątrz klasy znaków, wszystkie „specjalne” znaki, ale \, ], ^ i - tracą specjalne znaczenie) lub możesz użyć \\(.

Powiązane problemy