我的要求如下:
input => "Employee.Addresses[].Address.City"
output => "Empolyee.Addresses[].City"
(Address is removed which is present after [].)
input => "Employee.Addresses[].Address.Lanes[].Lane.Name"
output => "Employee.Addresses[].Lanes[].Name"
(Address is removed which is present after []. and Lane is removed which is present after [].)
如何在C#中执行此操作?
答案 0 :(得分:1)
private static IEnumerable<string> Filter(string input)
{
var subWords = input.Split('.');
bool skip = false;
foreach (var word in subWords)
{
if (skip)
{
skip = false;
}
else
{
yield return word;
}
if (word.EndsWith("[]"))
{
skip = true;
}
}
}
现在你像这样使用它:
var filtered = string.Join(".", Filter(input));
答案 1 :(得分:1)
正则表达式怎么样?
Regex rgx = new Regex(@"(?<=\[\])\..+?(?=\.)");
string output = rgx.Replace(input, String.Empty);
说明:
(?<=\[\]) //positive lookbehind for the brackets
\. //match literal period
.+? //match any character at least once, but as few times as possible
(?=\.) //positive lookahead for a literal period
答案 2 :(得分:0)
缺少您对所需内容的描述。如果我理解错误,请纠正我。
您需要找到模式"[]."
,然后删除此模式后的所有内容,直到下一个点.
如果是这种情况,我相信使用正则表达式可以轻松解决问题。
因此,模式"[]."
可以用正则表达式写成
"\[\]\."
然后你需要找到这个模式之后的所有内容,直到下一个点:".*?\."
(.*?
表示每个字符尽可能多次,但是以非贪婪的方式,即在第一个点停止点它发现)。
所以,整个模式将是:
var regexPattern = @"\[\]\..*?\.";
并且您想要用“[]替换此模式的所有匹配项。” (即删除括号后直到点的匹配)。
所以你在Regex
类中调用Replace
方法:
var result = Regex.Replace(input, regexPattern, "[].");