2010-07-15 74 views
0

我想提取一個字符串的最後一個字符。實際上我應該用例子來說明。下面是我想提取字符串:使用正則表達式提取一個句子的最後一個字符

<spara h-align="right" bgcolor="none" type="verse" id="1" pnum="1"> 
    <line> 
     <emphasis type="italic">Approaches to Teaching and Learning</emphasis> 
    </line> 
</spara> 

在上面的字符串,我想這個詞之間插入空格「學習」和「</emphasis>」如果沒有存在的空間。

感謝,

+2

有些用戶使用Linq2XML或XPath建議的,但你清楚問一個正則表達式。你能否詳細說明這是否是一個嚴格的要求?文檔太大了,您不能或者不應該將它加載到DOM中? – Abel 2010-07-15 11:14:57

+0

無論加載完整文檔,Regex作爲XML解析器都是一個註定的概念。如果文檔太大而不能一次加載,.net提供了XmlReader/XmlWriter,它可以用來在不完全加載文檔的情況下遍歷文檔節點。 – spender 2010-07-15 11:26:02

+0

@spender:我完全同意。而XmlReader/Writer在我的經驗中速度非常快。 – Abel 2010-07-15 12:39:56

回答

0

也許像下面這樣?

Regex.Replace(yourString, @"(>[^<]+[^ ])<", @"$1 <"); 

的解決方案假定一個句子是長字符><之間,並且一個或多個。

這句話是否真的在XML內部,或者你是否使用任何XML或DOM方法提取它?例如,使用這樣的:

foreach(node in YourDOM.SelectNodes("//emphasis[@type='italic']")) 
{ 
    string yourString = node.FirstChild.Value; 
} 

如果是這樣,如果字符串是它自己的,你可以做到這一點,而不是,這是方式更簡單,更安全:

Regex.Replace(yourString, "([^ ])$", "$1 "); 

編輯:我本來錯過如果沒有空間存在,後上方與該信息編輯

1

看一看一些的LINQ到XML的例子就在這裏,而不是使用正則表達式。

+0

沒有正則表達式不是嚴格要求Linq 2 xml也將非常感謝,如果任何人可以在這方面的幫助。 – 2010-07-15 11:24:35

1

使用LINQ到XML,你可以如下做到這一點:

XDocument doc = XDocument.Load("xmlfilename"); 

foreach (var emphasis in doc.Descendants("emphasis")) 
{ 
     if (emphasis.Value.Last() != ' ') 
     emphasis.Value += " "; 
} 
doc.Save("outputfilename"); 

相反的文件你可以使用流,讀者等在加載

+0

+1我喜歡這個清晰的例子和很好的建議(但它不是被問到的;) – Abel 2010-07-15 11:13:04

相關問題