2011-10-20 58 views
1

如何使用Regex/c#替換以下實現以下內容?如何使用正則表達式替換字符串中的數據模式?

輸入字符串我:「測試數據:<test param="p" value="v"/>輸入字符串繼續」

輸出字符串我需要:「測試數據:((test param={p} value={v}))輸入字符串繼續」

+0

您是否需要有關RegEx或替換的幫助?向我們展示你到目前爲止的代碼。 – RedFilter

+0

有點吝嗇的細節 - 什麼是一些接近但不應該匹配的東西? –

+0

我所擁有的是匹配模式的正則表達式。從我所知道的你可以匹配一個正則表達式模式(我可以做到)並用另一個字符串替換它,但是我需要用另一個模式替換它,不知道該怎麼做,或者甚至可能。 –

回答

1

我假設你真正的問題是如何實現的和查找/替換需求似乎是相當剛性的,這裏是一個爲您的工程案例:

Find:  ([^:]*): <([^=]*)="([^"])"([^=]*)="([^"])"/> 
Replace: $1: (($2={$3}$4={$5})) 

查找表達式可細分如下:

([^:]*) # Capture zero or more characters that ARE NOT a colon 
: <  # Match a colon, a literal space, then a less-than sign 
([^=]*) # Capture zero or more characters that ARE NOT an equals sign 
="   # Match an equals sign, then a double quote 
([^"])  # Capture zero or more characters that ARE NOT a double quote 
"   # Match a double quote 
([^=]*) # Capture zero or more characters that ARE NOT an equals sign 
="   # Match an equals sign, then a double quote 
([^"])  # Capture zero or more characters that ARE NOT a double quote 
"/>  # Match a double quote, a forward slash, then a greater-than sign 

正則表達式中的圓括號()表示「捕獲」與括號內容匹配的任何字符。不在括號內的任何內容都將「匹配」,但在查找和替換期間將被丟棄。這對於從諸如從<name attribute1="value1"/>中提取name,attribute1value1的模式提取數據位是有用的,然後將其放入另一種文本模式。

在C#中,使用System.Text.RegularExpressions.Regex對象來匹配或使用正則表達式進行替換。相信語法/簽名(對於實例的Regex對象的)是regexObject.Replace(input As String, replacement As String) As String

替換表達式包含$1$2等,這指的是匹配的包圍在括號()部分。因此,$1(在替換表達式)將插入由第一組([^:]*)匹配的文本(從匹配表達式)

這種組合將變成這樣的文字:

「測試數據:<測試PARAM = 「p」value =「v」/ >「更多文字。等等等等等等 「的測試數據:<測試PARAM =」 p 「的值= 」V「/ >」,然後一些文字...

進入這樣的文字:

「的測試數據: ((test param = {p} value = {v}))「more text。 ((測試param = {p}值= {v}))「然後再寫一些文字...

學習正則表達式的好資源我知道的90%)是Regular-Expressions.info,而一個名爲RegexBuddy的相關工具也適用於構建,測試和調試正則表達式。

+0

它工作正常。你能解釋一下([^:] *)在替換工作中的Find和$ 1:部分中的方式嗎? –

+0

我試圖解釋第三段中的'$ 1'(它開始'替換表達式包含...'),並且我不確定它是否不清楚或者是否丟失了某些東西。沒有深入到正則表達式內部,我不確定我還可以添加什麼:D或者你是否更多地詢問匹配部分'([^:] *):'? –

+0

在$ 1旁邊做的冒號是什麼,和正則表達式相同嗎?是的,什麼([^:] *):表示。對不起,我的正則表達式技巧很弱。如果你分別匹配每一塊,爲什麼你需要([^:] *):在開始。那:令我困惑。 –