2009-10-14 65 views
2

因爲我不是很熟悉正則表達式,是否有可能(是否很難做或不能)提取中間符號中的某些文本?例如:使用字符串的方法,而不是正則表達式

<meta name="description" content="THIS IS THE TEXT I WANT TO EXTRACT" /> 
+0

例如??? – solairaja 2009-10-14 04:55:58

+1

我不相信它會很難,但對於任何不平凡的實現,您正在尋找相當大量的代碼來編寫和維護。而且,你會在任何接近正則表達式的地方觸碰它。 – Gregory 2009-10-14 05:06:49

+0

正則表達式是那些令人生畏的事情之一,不應該因爲它的複雜性而被避免。這比任何標準的字符串方法(大多數情況下)要高效得多,而且有可能是更好的選擇,即使它會令人頭昏腦脹。 : - ! – 2009-10-14 08:28:01

回答

2

當然,你可以識別開始和您所需的子字符串由String方法如IndexOf結束,然後獲得所需的Substring!在你的例子中,你想找到(與IndexOf)「內容=」,然後第一個",對吧?一旦你將這些索引放入字符串中,Substring就可以正常工作。 (不張貼C#代碼,因爲我不能完全肯定它到底是什麼,你想要的,超越的IndexOf和子串...... - - !)

如果是這樣的話:

int first = str.IndexOf("contents=\""); 
int last = str.IndexOf("\"", first + 10); 
return str.Substring(first + 10, last - first - 10); 

應該多於或少做你想做的事(再次道歉,如果在硬編碼10 s之內有一個或多個) - 它們意味着代表你要找的第一個子字符串的長度;稍微調整它們直到你得到你想要的結果! - ),但這是一般的概念。使用單參數IndexOf定位開始,使用雙參數IndexOf定位結尾,用Substring切斷所需的片斷...!

+0

多數民衆贊成在正確的,我後面是文字inbetween兩個引號像內部的標籤內容如下:內容=「我需要這個文本」 – 2009-10-14 05:05:30

+0

感謝代碼亞歷克斯,但它遠不及近,它總是提取前15或這樣的文件的開頭字符..怪異? – 2009-10-14 06:51:19

+0

當您添加輸出語句以顯示第一個和最後一個的值時,您會看到什麼? – 2009-10-14 14:59:09

0

當然你可以用正則表達式來完成。假設你想獲得<和>之間的文字...

string GetTextBetween(string content) 
{ 
    int start = content.IndexOf("<"); 
    if(start == -1) return null; // Not found. 
    int end = content.IndexOf(">"); 
    if(end == -1) return null; // end not found 
    return content.SubString(start, end - start); 
} 
1

如果輸入爲:文本1 /文本2 /文字3

The below regex will give the 2 in the group i.e, TEXT3 

^([^/]*/){2}([^/]*)/$ 


if you need the last text always, then use the below 

^.*/([^/]*)/$ 
+0

我認爲OP正在尋找一個非正則表達式解決方案。 – 2009-11-10 14:37:05

5

既然你給一個XML例子,只是使用XML解析器:

string s = (string) XElement.Parse(xml).Attribute("content"); 

XML不是一個簡單的文本格式,並Regex ISN真的不太合適;使用適當的工具將保護你免受各種邪惡的......例如,下面的是相同爲XML:

<meta 
    name="description" 
    content= 
     'THIS IS THE TEXT I WANT TO EXTRACT' 
/> 

這也意味着,當需求變化,你有一個簡單的TWEAK對代碼進行編碼,而不是試圖取出正則表達式並將其重新組合(如果訪問非重要節點,這可能會非常棘手)。同樣,xpath可能是一個選項;所以在你的數據xpath:

/meta/@content 

是你所需要的。

如果你還沒有.NET 3.5:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml(xml); 
string s = doc.DocumentElement.GetAttribute("content"); 
+0

這真的很好。感謝那個! =) – 2009-10-14 05:32:58

相關問題