2015-06-18 37 views
0

我已經看過不少相關的帖子,但我仍然遇到一些問題。使用正則表達式提取多個字符串

我需要刪除多個特定標記之間的值,而不用觸及其他具有相似名稱的值。例如,刪除「LastName」的值,但不刪除「Last」的值。

這裏是我的樣品測試字符串

<jv:FirstName>TEST</jv:FirstName> 
<jv:MiddleInitial>TEST</jv:MiddleInitial> 
<jv:LastName>TEST</jv:LastName> 
<jv:EmployerName>TEST</jv:EmployerName> 
<jv:LocationName>TEST</jv:LocationName> 
<jv:CallerName>TEST</jv:CallerName> 
<jv:Last>TEST</jv:Last> 

我只是想刪除值名字,姓氏,和MiddleInitial。

這是我目前有我的正則表達式:

Regex.Replace(str, @"<(jv:[FirstName|MiddleInitial|LastName].*>).*?</\1, "<$1</$1"); 

這種模式的工作原理,但它也拉動了「LOCATIONNAME」和「最後」的標籤。

有什麼辦法只拉特定字符串?

+2

爲什麼不使用XML解析器而不是正則表達式?你的理智會感謝你。 – Flimzy

+0

'[FirstName | MiddleInitial | LastName]'看起來不正確,'[]'是一個字符集,它不使用這些單詞。然後你用'。*'跟隨它來匹配任何東西。所以它是匹配的最後,因爲你可以拼寫它與這些字符,和LocationName,因爲它擊中L. * – TessellatingHeckler

回答

1

只需使用括號而不是大括號。

Regex.Replace(str, @"<(jv:(?:FirstName|MiddleInitial|LastName)>).*?</\1, "<$1</$1"); 

大括號表示與其中的任何字符匹配一次。圓括號匹配完整的字符串。

+0

非常感謝!我一直在b my我的頭幾個小時 –

+1

對不起,我將確保爲我所有未來的問題做到這一點。謝謝你通知我。並再次感謝您的幫助! –

相關問題