[英]Using Regex.Replace() to replace text in a string
我想使用Regex.Replace()遍歷包含以'//'分隔的單詞的字符串,以檢查是否有單詞與傳遞給該方法的字符串值匹配。 如果文本字符串確實與wordList中的一個單詞匹配,則將其替換並返回“ matched”,如果與任何單詞都不匹配,則返回傳遞給該方法的原始單詞,而不替換它。
這是我目前的代碼:
public void CheckText(string text)
{
//Check text entered by user
string wordList = "word1//word2//word3 etc...";
string replaceString = "matched";
if (!string.IsNullOrEmpty(wordList))
{
//How do I implement this part?
return Regex.Replace(text, wordList, replaceString);
}
}
請有人可以幫我嗎? 任何幫助/評論將不勝感激!
更新:(從更新粘貼到OP作為答復發布的問題)
多謝您的回覆。 我可能沒有正確解釋問題。 我希望該方法替換與wordList中的字符串匹配的傳遞的文本字符串。 例如,將'word1'傳遞給該方法,然后該方法檢查'word1'是否在wordList中,如果存在,則將傳遞給該方法的原始字符串替換為'matched',然后返回'匹配”,如果它與wordList中的任何單詞都不匹配,則返回原始字符串,而不要替換它。
您不需要正則表達式String.Replace
可以正常工作-也更具可讀性:
public void CheckText(string text)
{
string wordList = "word1//word2//word3 etc...";
string replaceString = "matched";
return wordList.Replace(text, replaceString );
}
更新:(以下更新的問題)
如果您只是想檢查單詞列表中是否存在傳入的字符串,則可以簡單地使用String.IndexOf
(如果不存在,它將返回-1)。 但是,您尚未為函數指定返回類型,因此我不知道您希望如何將結果報告回來:
public string CheckText(string text)
{
string wordList = "word1//word2//word3 etc...";
if(wordList.IndexOf(text) > -1)
return "matched";
return text;
}
如果傳入的text參數包含在wordList中,則上面的函數將返回“ matched”,否則不返回text參數本身。
如果只想替換字符串,則可能要使用String.Replace 。 也許,如果您包括給定輸入的預期結果,我們可能會更好地為您提供幫助。
如果您的意思是任何一個單詞都應該匹配,那么您將需要一個正則表達式,例如
new Regex("(word1)|(word2)|(word3)");
因此,您必須將單詞列表轉換為這樣的正則表達式:
string wordList = "word1//word2//word3";
// search every word that ends with '//' or with the end of the string
// then replace it by (word)|
// trim the last '|'
string transformed = Regex.Replace(wordList, @"(\w{1,})(//|$)", "($1)|").TrimEnd('|');
// transformed contains (word1)|(word2)|(word3) now
現在使用transformed
作為您的正則表達式。
return Regex.Replace(text, transformed, replaceString);
回應評論使用
string result = new Regex(transformed).Match(text).Success ? replaceString : "";
如果不匹配,則返回一個空字符串,否則返回replaceString中的內容。
如果您確實想通過正則表達式來執行此操作,則可以將其用作字符串的擴展方法:
private static Dictionary<string, Regex> regexCache = new Dictionary<string, Regex>();
public static string RegexReplace(this string value, string pattern, string replacement)
{
return RegexReplaceInternal(value, pattern, replacement, RegexOptions.Compiled);
}
private static object rriLocker = new object();
private static string RegexReplaceInternal(string value, string pattern, string replacement, RegexOptions regexOptions)
{
bool isInCache;
lock (rriLocker)
{
isInCache = regexCache.ContainsKey(pattern);
}
if (isInCache)
{
return regexCache[pattern].Replace(value, replacement);
}
lock (rriLocker)
{
Regex rx = new Regex(pattern, RegexOptions.Compiled);
regexCache.Add(pattern, rx);
return rx.Replace(value, replacement);
}
}
接着:
var expression = string.Concat("(", wordList.Replace("//", "|"), ")");
var output = text.RegexReplace(expression, replaceString);
:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.