2014-03-24 106 views
2

我在查找正則表達式時遇到問題。我有一些文字,可能會被xml分隔。例如:這是否有正則表達式?

<root> 
    <text>Thi</text> 
    <text>s is ju</text> 
    <text><bold>s</bold></text> 
    <text>t a tes</text> 
    <text><italic>t</italic></text> 
</root> 

我想在XML中搜索單詞「公正」和需要的結果

ju</text> 
<text><bold>s</bold></text> 
<text>t 

是否有posibility得到這個結果與一個正則表達式?

順便說一句:我已經有正則表達式從XML的純文本,它是(在C#句法的):

string plaintext = new Regex(@"\<[^\<]*\>").Replace(xmlstring, string.Empty); 

這一個發現每一個「<」到「>」與一切(*)之間但不是另一個「<」,並用string.Empty替換它。所以我得到純文本,並可以搜索我的「公正」,但結果只是「只是」,而不是與之間的XML ...

有沒有人有想法?

+4

不要使用這個正則表達式;它們不適合解析XML。相反,使用真正的XML解析器,這就是他們的目的。 – TypeIA

回答

1

最好不要在xml上使用regexp。不要。

根據你的任務,你想要的字符串的每個字符後,你可以期待任何XML標籤。所以基本上你需要每個字母后插入「maybetag」正則表達式的一部分 - 這樣的事情:

j(\<[^\<]*?\>\s*)*u(\<[^\<]*?\>\s*)*s(\<[^\<]*?\>\s*)*t(\<[^\<]*?\>\s*)* 

工作樣本http://www.rexfiddle.net/WdkpliZ

+0

即使's'或't' - 'ju''或'jus t'之前有空格,也會匹配。 –

+0

當然,這是想法,並不是完全可以工作的樣本。它在許多情況下都不起作用,就像XML具有CDATA項目一樣 - 同樣,regexp不是解析XML的工具。 – Lanorkin

+0

是的,你是正確的正則表達式和XML,但作爲搜索文本突出顯示或保留提取塊的文本格式的快速解決方案,它可能是可行的(我想作者想要實現這些任務)。 –

1

如果你在單行(沒有空格)中有XML,你可以通過在just之間劃分(?:<[^>]*>)*正則表達式部分來創建你的正則表達式。例如:

j(?:<[^>]*>)*u(?:<[^>]*>)*s(?:<[^>]*>)*t 

如果您仍然需要處理多XML,可以通過正則表達式(?!)(?:<[^>]*>\s*)*(?<!)分裂字母。它將允許XML標籤之間的空格,但不會在字母之前或之後留出空格。

j(?!)(?:<[^>]*>\s*)*(?<!)u(?!)(?:<[^>]*>\s*)*(?<!)s(?!)(?:<[^>]*>\s*)*(?<!)t 
1

試試這個:

/j(<[^>]+>)*u(<[^>]+>)*s(<[^>]+>)*t/