2012-07-20 41 views
1

爲什麼我的正則表達式找不到我的字符串?爲什麼不開始,以regularexpression在C#上工作結束?

Regex.Replace(" SCRIPT language=Javascript src=\"\"\r\ntype=text/javascript ", 
    "^language=Javascript$", 
    "language=\"Javascript\"", 
    RegexOptions.Multiline | RegexOptions.Compiled 
); 

^language=Javascript$不起作用。如果我刪除它,它可以工作,但我想確保部分類似的字符串不會被替換(它發生在我的測試中)。字符串不是常量,我實際上使用變量,但這只是我使用的一種情況。任何幫助?

+1

從什麼意義上說'語言'在'SCRIPT語言的開頭*'=' – mellamokb 2012-07-20 14:26:36

+1

您的字符串不會以該表達式開始和結束。 – Bergi 2012-07-20 14:27:32

+0

@mellamokb我不明白你的意思?如果這個字符串是正確的html,那麼問題不在於這個,如果這就是你所指的。這只是我的測試中的一個例子 – pqsk 2012-07-20 14:28:39

回答

6

好了,這是因爲^代表開始字符串$字符串的結束。你的正則表達式根本無法匹配。你可以使用

\blanguage=Javascript\b 

作爲一種變通方法,如果你只是想確保foolanguage=Javascript不匹配。但是,這取決於您期望的數據和該方法的一些內容。更安全的方式是

(?<=)language=Javascript(?=) 

這將確保在匹配前後有空格。你可以從那裏變得更復雜(和可靠),例如

(?<=)language=Javascript(?= |>) 

匹配甚至<script type='text/javascript' language=Javascript>

+0

我之前有過類似的情況,但是我發現有一個案例(昨晚發生)可能存在換行符。我可以刪除換行符,但我想這可能會更快,但\ bstring \ b不會工作,如果它說\ bmyAttribute = http://www.google.com \?lang =&\ b – pqsk 2012-07-20 14:31:01

+2

像往常一樣正則表達式:知道你的輸入是什麼,可以是什麼,你想要什麼,需要什麼。對於這樣的問題,並不是一成不變的答案。尤其是如果你只給出稀缺的細節。我給了你一個起點。從那裏工作取決於你。我真的不能做更多。 – Joey 2012-07-20 14:33:44

+0

我抓住你的漂移。實際上檢查你的編輯,這與其他想到的東西一起工作。非常感謝。 – pqsk 2012-07-20 14:38:51