我有一个很大的字符串。在那个大字符串中,我想获取所有以@@ 开头并以@@ 结尾的唯一单词。@@ 之间可以是文本、数字或字母数字或任何内容。
一旦我得到所有以@@ 开头并以@@ 结尾的唯一单词,我想用一个与不同数组中的键匹配的值替换每个单词。
在 C# 中寻找解决方案。
试试这个正则表达式:
@@\b\S+?\b@@
示例代码:
List<string> lst = new List<string>();
MatchCollection mcol = Regex.Matches(sampleString,@"@@\b\S+?\b@@");
foreach(Match m in mcol)
{
lst.Add(m.Tostring());
}
这里lst
包含匹配的值,比较每个值并根据您的标准替换它。
使用正则表达式和 Linq 的示例
string text = "@@bb@@@@cc@@@@sahasjah@@@@bb@@";
var matches = Regex.Matches(text, @"@@[^@]*@@");
var uniques = matches.Cast<Match>().Select(match => match.Value).ToList().Distinct();
尝试以下代码(使用Regex.Replace Method):
string s = @"@@Welcome@@ to @@reg-ex@@ @@world@@.";
Dictionary<string, string> sub = new Dictionary<string,string>{
{ "@@reg-ex@@", "regular expression" },
{ "@@world@@", "hell" },
};
Regex re = new Regex(@"@@.*?@@");
Console.WriteLine(re.Replace(s, x => {
string new_x;
return sub.TryGetValue(x.ToString(), out new_x) ? new_x : x.ToString();
}));
印刷:
@@Welcome@@ to regular expression hell.
您也许可以执行以下操作
Regex regex = new Regex("@@(.*)@@");
或者,如果您不想使用正则表达式,请使用以下内容(我认为更容易理解)
var splittedString = yourString.Split(new string[] { "xx" }, StringSplitOptions.None);
您可以使用正则表达式 @@.+?@@ 来替换您的特殊字符串标记。
使用System.Text.RegularExpressions.Regex.Replace()查找和替换匹配的标记。
试试这个小伙伴......
string yourString = ""; // Load your string
string[] splits = Regex.Split(yourString, "[ \n\t]"); //Split the long string by spaces, \t and \n
foreach (string str in splits)
{
if(Regex.IsMatch(str, "^^@@.*?@@$$")) // Find words starting and ending with @@
{
// You may replace either splits values or build a new string according your specification
}
}
我不会为此使用正则表达式。这更快:
//Pseudo code
string[] parts = yourLongString.split("@@");
for(i=0;i<parts.length;i++){
if(parts[i].indexOf(' ')<0){
// there is no space, it is a keyword
parts[i]=yourDictionary[parts[i]];
}
}
yourFinalText=parts.join(' ');