2011-04-27 85 views
0

我有像CAIRN CA-200字符串,並希望匹配CA與該字符串,並希望用string.empty替換 它,但它不應該替換爲CAIRN,它應該替換爲CA,其中 加入了hypen( - )。該字符串也可以CAIRN CA 200,那麼它也應該匹配 只有CA字,它不應該與CAIRN匹配,這意味着字符串應該匹配 只與整個單詞,像這裏它是CA和不應該匹配到任何 字的子字符串。如何實現這一目標?正則表達式的字符串操作

有一件事是在那之前和之後的那個詞將不會有任何字母或 數字字符就像這裏是連字符。

所以,一個解決方案可以看到,如果開始和單詞的結尾是不是字母或數字 那麼這個詞應該匹配,但我不知道怎麼寫的正則表達式這一點。那是 如何匹配不是字母或數字的字符所包含的單詞?

我試着用字符串regex ="^[a-zA-Z0-9_]" + "CA" + "^[a-zA-Z0-9_]"這樣的東西,但它不起作用。

回答

1
resultString = Regex.Replace(subjectString, @"\bCA\b", ""); 

替換CA時如果發現作爲一個整體詞罷了。 \b是僅在字母數字「單詞」的開頭或末尾匹配的單詞邊界錨。

你的正則表達式失敗,因爲^放置在字符類之外,意思是「匹配字符串的開頭」。

如果你也想更換周圍的字符,你可以使用

"[^a-zA-Z0-9_]" + "CA" + "[^a-zA-Z0-9_]" 

在字符類中,^否定類的內容,如你預期它。請注意,如果CA位於字符串的開始或結尾,則將失敗。

+0

對不起你的第一個正則表達式工作正常,我。這是替換爲空的,但我可以在替換之前檢查它是否存在字符串CAIRN-CA-或CAIRN-PA中的@「\ bCA \ b」?因爲我有更多的東西要檢查這個字符串,就像它包含PA字一樣,那麼用空字符替換它,就像它包含PUT,用PUT替換空等等。 – Harikrishna 2011-04-27 12:14:10

+0

我不太確定我關注。你想在一個正則表達式中用空來替換'CA'和'PA'和'PUT'嗎?沒問題:'@「\ b(CA | PA | PUT)\ b」'會匹配其中的任何一個。 – 2011-04-27 17:39:55

1
var r = "CA"; 
var source = "CAIRN-CA-200"; 
var result = Regex.Replace(source, "([^\\w\\d_])" + r + "\\1", "$1$1"); 

這將取代不與AZ,0-9或包圍任何ř_只要它們匹配,以下允許不同包圍,將在開始或結束字符串匹配

var r = "CA"; 
var source = "CAIRN-CA-200"; 
var result = Regex.Replace(source, "([^\\w\\d_]|^)" + r + "([^\\w\\d_]|$)", "$1$2"); 

這是我的第二個正則表達式的Linqpad測試。

void Main() 
{ 
    Rep("CAIRN-CA-200", "CA").Dump(); 
    Rep("CAIRN", "CA").Dump(); 
    Rep("CAIRN CA 200", "CA").Dump(); 
    Rep("CA 200", "CA").Dump(); 
    Rep("CA", "CA").Dump(); 
    Rep("CAIRN CA", "CA").Dump(); 

} 

// Define other methods and classes here 
string Rep(string s, string r) 
{ 
    return Regex.Replace(s, "([^\\w\\d_]|^)" + r + "([^\\w\\d_]|$)", "$1$2"); 
} 

而且結果

CAIRN-CA-200 => CAIRN--200 
CAIRN => CAIRN 
CAIRN CA 200 => CAIRN 200 
CA 200 => 200 
CA => 
CAIRN CA => CAIRN