Самый элегантный способ раздеться и заменить шаблон String - PullRequest
0 голосов
/ 20 января 2010

Я пытаюсь удалить и заменить текстовую строку, которая выглядит следующим образом, самым элегантным способом:

element {"item"} {text {
          } {$i/child::itemno}

Чтобы выглядеть как:

<item> {$i/child::itemno}

Следовательно, удаляем текст элемента, подставляя его фигурные скобки и удаляя текст и сопровождающие его фигурные скобки. Эти шаблоны могут быть встречены несколько раз. Мне лучше использовать Java java.util.regex.Pattern ИЛИ простой replaceAll ИЛИ org.apache.commons.lang.StringUtils?

Спасибо за ответы:

Теперь у меня есть следующее, но я не уверен относительно количества обратных слешей, а также того, как завершить последнюю замену, которая использует мою группу (1), и заменяет ее на <в начале и> в конце:

 Pattern p = Pattern.compile("/element\\s*\\{\"([^\"]+)\"\\}\\s*{text\\s*{\\s*}\\s*({[^}]*})/ ");
             // Split input with the pattern
        Matcher m = p.matcher("element {\"item\"} {text {\n" +
                "          } {$i/child::itemno} text { \n" +
                "            } {$i/child::description} text {\n" +
                "            } element {\"high_bid\"} {{max($b/child::bid)}}  text {\n" +
                "        }}  ");

            // For each instance of group 1, replace it with < > at the start and end

Ответы [ 2 ]

1 голос
/ 20 января 2010

Найти:

/element\s*\{"([^"]+)"\}\s*{text\s*{\s*}\s*({[^}]*})/

Заменить:

"<$1> $2"
0 голосов
/ 20 января 2010

Я думаю, что подойдет простая замена строки. Вот версия Python (может быть превращена в однострочник):

>>> a = """element {"item"} {text {
          } {$i/child::itemno}"""
>>> 
>>> a
'element {"item"} {text {\n          } {$i/child::itemno}'
>>> a=a.replace(' ', '').replace('\n', '')
>>> a
'element{"item"}{text{}{$i/child::itemno}'
>>> a = a.replace('element {"', '<')
>>> a
'element{"item"}{text{}{$i/child::itemno}'
>>> a = a.replace('element{"', '<')
>>> a
'<item"}{text{}{$i/child::itemno}'
>>> a = a.replace('"}{text{}', '> ')
>>> a
'<item> {$i/child::itemno}'
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...