2011-08-15 47 views
3

我需要短語拆分單詞內的空間,但是定義標籤 中忽略的文本例如正則表達式拆分詞組的話,卻忽略標籤

輸入

<i>111 111 111</i> 222 333 444 <i>555 666</i> 888 999 <i>000 111</i> 

輸出

<i>111 111 111</i> 
222 
333 
444 
<i>555 666</i> 
888 
999 
<i>000 111</i> 
+0

你是什麼意思是「定義標籤」 - 任何標籤? – Chronial

+1

改爲使用[DOM](http://php.net/dom)。查找沒有子節點並分割內容的文本節點。 –

+3

你在用什麼語言?是否所有的例子都很簡單(即沒有嵌套標籤,沒有xml註釋,沒有CDATA塊) – Jens

回答

1

試試這個:

/<i>[\d\s]*<\/i>|\d+/g 

說明:

  • 對於<i>標記中的字符串,空格和數字都將包含在匹配中。
  • 不在標籤內的字符串不能包含空格,所以它們將被限制爲數字字符串。
  • |交流發電機短路,所以它可以確保<i>111 222 333</i>將被視爲單個單元,分離到111222,和333

在測試了Regexr這裏,正常工作:http://regexr.com?2uf6j

0

如何在空間拆分只要而隨後的<後面沒有斜槓?

>>> import re 
>>> test = "<i>111 111 111</i> 222 333 444 <i>555 666</i> 888 999 <i>000 111</i>" 
>>> split = re.compile(" (?![^<]*</)") 
>>> split.split(test) 
['<i>111 111 111</i>', '222', '333', '444', '<i>555 666</i>', '888', '999', '<i>000 111</i>'] 

如果標籤可以嵌套,但(這是有原因的正則表達式是不是非常適合這類問題),這將失敗。