2012-08-03 49 views
1

我目前正在使用此代碼來替換完全匹配。然而,這不起作用,它也移除了換句話說出現在單詞的地方。如何只使用正則表達式替換文本中的確切詞c#

例子:

string pattern = "(?i)(flo)"; 
jobTitle = Regex.Replace("Florist of Vinyl Flowers of flo abc", pattern, string.Empty); 

這使得字符串:

乙烯owers的奧里斯

哪項是錯誤的,應該只從字符串中刪除FLO,如果我用途:

string pattern = "(?i)\b(flo)\b"; 

但是這不匹配即使在有一個完整的字,它不會匹配,沒有匹配/

UPDATE:

完整的代碼運行是這樣的:

splitter = wordToremoveTitle.Split('|'); 
if (splitter.Length > 0) 
{ 

    for (int t = 0; t < splitter.Length ; t++) 
    { 
    String pattern = @"(?i)\b(" + splitter[t] + ")\b"; 
    jobTitle = Regex.Replace(jobTitle, pattern, string.Empty); 
    } 
+1

'\ b'是退格的C#字符文字。你需要再次將它轉義爲'\\ b',或者使用一個逐字串:'string pattern = @「(?i)\ b(flo)\ b」;' – vcsjones 2012-08-03 21:05:23

+0

@vcsjones我做了,改成(?i )\\ b(florist)\ b但是這甚至不會將花店從原始字符串移出來...... string pattern = @「(?i)\ b(」+ splitter [t] +「)\ b」; – confusedMind 2012-08-03 21:08:09

+0

jobTitle = jobTitle.Replace(「flo」,string.Empty); – 2012-08-03 21:11:34

回答

1

你是如此接近,正則表達式:(?i)\bflo\b

string pattern = @"(?i)\bflo\b"; 
jobTitle = Regex.Replace("Florist of Vinyl Flowers", pattern, string.Empty); 

如果詞的意思是 「花店」 和 「花」,而不是 「FLO」 使用一個(?i)\b[^ ]*flo[^ ]*\b

+0

我已經申請了確切的說法,仍然沒有運氣 – confusedMind 2012-08-03 21:10:06

+0

(?i)\\ b [^] * florist [^] * \ b這不會刪除,從字符串花店? – confusedMind 2012-08-03 21:21:32

+0

更新的問題請參閱。 – confusedMind 2012-08-03 21:25:26

1

您需要找出「詞」對你來說意味着什麼,而不是用正則表達式來定義它。

如果它們不匹配「\ b」類別(即@「[\ s,.- $] +」「空格字符,字符串的開頭/結尾,標點符號),您可能需要定義邊界。 。您可能需要使用@ \ w +」 - ‘’。類別如果需要,包括前綴之後,單詞的剩餘部分

參考 - Character classes

樣品taht應該匹配單詞開頭‘字字符FLO’ :

string pattern = @"(?i)\b(flo\w+)\b"; 
+0

我不想匹配以flo開頭的單詞,但匹配單詞flo並將其替換,但不要將花替換爲flo。 – confusedMind 2012-08-03 21:16:56

+0

更新的問題請參閱。 – confusedMind 2012-08-03 21:24:29

相關問題