2010-01-20 65 views
0

我試圖剝離和替換文本字符串,看起來最優雅的方式可能如下:最優雅的方式來剝離和替換字符串模式

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 

回答

0

我認爲一個簡單的字符串替換會做。下面是一個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}' 
>>> 
+0

對不起,我是新來的正則表達式,如何能這是合併成一條線? – Pablo

1

查找:

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

替換:

"<$1> $2" 
+0

感謝您的迴應,任何想法如何可以轉化爲Java?特別是<$1> – Pablo

+0

@pablo的標識:括號。 '([^「] +)'和'({[^}] *})' –

+0

謝謝,我該如何進行<$1>替換,它需要在第一組的每一邊提供尖括號? – Pablo

相關問題