2017-06-02 51 views
1

我想做一個程序,搜索文本文件中的某些標籤,看看這些標籤之間是否有文本。下面的標籤示例。C#正則表達式搜索給出了假

--<UsrDef_Mod_Trigger_repl_BeginMod> 
--<UsrDef_Mod_Trigger_repl_EndMod> 

所以我想尋找--<UsrDef_Mod__Begin_End

我做這些正則表達式,但我得到的每一個錯誤。

if (Regex.Match(line, @"/--<UsrDef_Mod_.*_BeginMod>/g", RegexOptions.None).Success) 
else if (Regex.Match(line, @"/--<UsrDef_Mod_.*_EndMod>/g", RegexOptions.None).Success) 

因此,任何幫助找到我會出錯的地方。我使用regexr.com來檢查我的正則表達式,並在那裏得到一個匹配,但沒有在C#中。

+1

你可以嘗試自己,例如這裏:http://regexstorm.net/tester。順便說一句,而不是Regex.Match(...)。成功,你可以使用Regex.IsMatch – CHS

+1

不試圖避免這裏的問題,但一個可能的解決方案將是:line.substring(line.indexOf(「 -

回答

4

.NET庫正則表達式不理解"/ /g"包裝。

只是將其刪除:

// Regex.Match(line, @"/--<UsrDef_Mod_.*_BeginMod>/g", 
    Regex.Match(line, @"--<UsrDef_Mod_.*_BeginMod>", 
+0

我剛剛通過使用regexstorm.net/tester來實現這一點。在嘗試了所有的東西之後,我將它們移除了,並且它可以工作..但是thx。 –

2
if (Regex.Match(line, @"--<UsrDef_Mod_.*_BeginMod>", RegexOptions.None).Success) 
if (Regex.Match(line, @"--<UsrDef_Mod_.*_EndMod>", RegexOptions.None).Success) 

這些都得到了比賽 - 你只是刪除/ - 和/ g的選項 - 按照亨克Holtermann's答案 - a comparison of perl and c# regex options on SO - 進一步參考。

+1

絕對不應該使用'/'分隔符。 –

0
var matches = Regex.Matches(text, @"<UsrDef_Mod_([a-zA-Z_]+)_BeginMod>([\s\S]+?)<UsrDef_Mod_\1_EndMod>"); 
if (matches != null) 
    foreach (Match m in matches) 
     Console.WriteLine(m.Groups[2].Value); 

組#2將包含兩個標籤內的文本。