2015-10-13 63 views
0

我有以下的原始文本:我的C#正則表達式匹配失敗的標籤之間的文本

<target xml:lang="ar">افصل الدائرة عن مخرج جهاز التنفس،\nواترك خراطيم المهايئ الزفيري متصلة.</target> 

而我感興趣的<target xml:lang="ar">和結束標記</target>之間的文本,我意識到這是一個壞主意使用Regexm匹配HTML或XML標籤,但這些標籤是常量,因爲在那裏永遠不會添加屬性(它們是由一些工具生成的,並且始終是相同的)

現在我意識到有一百萬種方法來剝皮貓,而且我可以做一個子串匹配來獲取>和<之間的文本,但這真的讓我很沮喪,爲什麼模式雖然在線正則表達式測試人員確實符合http://regexstorm.net/tester等文本,但我選擇的方式仍然不起作用。

這裏是我的代碼:

string pattern = @"<target xml:lang=""ar"">(.*?)</target>";

string line = @"<target xml:lang=""ar"">افصل الدائرة عن مخرج جهاز التنفس،\nواترك خراطيم المهايئ الزفيري متصلة.</target>" 
foreach (Match match in Regex.Matches(line, pattern)) 
{ 
    // Split the Arabic text from the xml tags 
    string arabicTransMatch = match.Groups[1].Value; 
    string[] xmlTags = line.Split(new string[] { arabicTransMatch }, StringSplitOptions.None); 
    ... 
} 

感謝堆您的幫助所有

乾杯,

西蒙

+3

您需要使用'(?s)'或'Regex.Singleline'選項使'.'匹配新行。 – nhahtdh

+1

看看http://regex101.com。您可以使用它來根據測試字符串測試正則表達式,並實時查看它們是否符合您的期望。 –

+1

@JeffPrince:請不要爲.NET正則表達式提供regex101。不同的口味對他們每個人都有特定的怪癖。 – nhahtdh

回答

0

由於不贊成用正則表達式的使用標籤,我會回答我自己的問題在我回避使用正則表達式,並簡單地使用Substring方法;

int startIndex = line.IndexOf(">") + 1; 
line = line.Substring(startIndex, line.IndexOf("<", startIndex)); 

至於固定的正則表達式匹配問題,關於通過@nhahtdh給予SINGLELINE選項的建議奏效了。

感謝您的意見球員。

+1

你可能已經錯過了帶有標籤的正則表達式。你應該使用解析器,它在捕獲所有情況方面做得更好。使用字符串方法可能是您可以使用的最原始的方法,詳細而且不可擴展到多個案例。正則表達式會給你更多的覆蓋範圍,但是有它的位置。 – ergonaut

+0

@ergonaut是否可以鏈接到Parsers的例子?恐怕我不太明白你的意思。謝了哥們 – sayo9394

相關問題