[英]Split string with multiple separators in C#
我在使用分隔符&&
和||
分割C#中的字符串时遇到问题 。
例如,字符串可能如下所示:
"(abc)&&(rfd)&&(5)||(hh)&&(nn)||(iu)"
码:
string[] value = arguments.Split(new string[] { "&&" }, StringSplitOptions.None);
我需要在没有()
括号的数组中拆分或检索值 - 我需要输出
"abc" "rfd" "5" "nn" "iu"
我需要一个数组
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("a", "value1");
dict.Add("abc", "value2");
dict.Add("5", "value3");
dict.Add("rfd", "value4");
dict.Add("nn", "value5");
dict.Add("iu", "value6");
foreach (string s in strWithoutBrackets)
{
foreach (string n in dict.Keys)
{
if (s == n)
{
//if match then replace dictionary value with s
}
}
}
///Need output like this
string outputStr = "(value1)&&(value2)&&(value3)||(value4)&&(value5)||(value6)";
你应该试试这些:
string inputStr = "(abc)&&(rfd)&&(5)||(hh)&&(nn)||(iu)";
string[] strWithoutAndOR = inputStr.Split(new string[] { "&&","||" }, StringSplitOptions.RemoveEmptyEntries);
string[] strWithoutBrackets = inputStr.Split(new string[] { "&&","||","(",")" }, StringSplitOptions.RemoveEmptyEntries);
看看这个工作实例
根据MSDN docs: String.Split返回一个字符串数组,该数组包含此实例中由指定字符串或Unicode字符数组的元素分隔的子字符串。 split方法具有很少的重载方法,您可以在此方案中使用String.Split方法(String [],StringSplitOptions) ,您可以在其中指定要为拆分操作引用的子字符串。
StringSplitOptions.RemoveEmptyEntries
将帮助您从拆分结果中删除空条目
如果我理解你的问题,你有一个像这样的字符串:
"(abc)&&(rfd)&&(5)||(hh)&&(nn)||(iu)"
并希望输出如下:
"(value1)&&(value2)&&(value3)||(value4)&&(value5)||(value6)"
通过在您提供的字典中查找匹配的字符串(例如"abc"
)找到每个value*
值。
如果是这种情况,您可以使用带有MatchEvaluator的正则表达式来执行字典查找。
class Program
{
private static Dictionary<string, string> _dict = new Dictionary<string, string>
{
{"a", "value1"},
{"abc", "value2"},
{"5", "value3"},
{"rfd", "value4"},
{"nn", "value5"},
{"iu", "value6"}
};
private static void Main(string[] args)
{
string input = "(abc)&&(rfd)&&(5)||(hh)&&(nn)||(iu)";
string output = Regex.Replace(input, @"(?<=\()\w+(?=\))", Lookup);
Console.WriteLine(output);
}
private static string Lookup(Match m)
{
string result;
_dict.TryGetValue(m.Value, out result);
return result;
}
}
正则表达式(?<=\\()\\w+(?=\\))
匹配由大写或小写字母组成的非零长度字符串,下划线或数字: \\w+
,后面的断言后面的括号(?<=\\()
和关闭括号的前瞻断言(?=\\))
。
请注意,输入字符串"hh"
匹配的其中一个字符串不在您提供的字典中。 在这种情况下,我选择返回null
,您可能希望抛出异常或以其他方式处理此类错误。
在简单的情况下, MatchEvaluator
可以替换为lambda表达式。
你应该试试这个代码:
string value = "(abc)&&(rfd)&&(5)||(hh)&&(nn)||(iu)";
string[] splitVal = value.Split(new string[] { "&&", "||" },StringSplitOptions.None);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.