C# 在数字后面修剪字符串
我需要调整我的代码,以便它将修剪数字后的url。 例如,我希望删除List=36之后的所有内容。字母和特殊字符是唯一可能跟在列表编号后面的字符。因此,我只想在url读取列表编号后的字母或特殊字符时修剪url。谢谢 提交时捕获的当前URL示例C# 在数字后面修剪字符串,c#,string,url,C#,String,Url,我需要调整我的代码,以便它将修剪数字后的url。 例如,我希望删除List=36之后的所有内容。字母和特殊字符是唯一可能跟在列表编号后面的字符。因此,我只想在url读取列表编号后的字母或特殊字符时修剪url。谢谢 提交时捕获的当前URL示例 https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?List=36caab7e%2D2234%2D4981%2D8225%%2Easpx https://portal.te
https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?List=36caab7e%2D2234%2D4981%2D8225%%2Easpx
https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?List=36,http://portal.test/testabc/Lists/TEST/AllItems.aspx
我希望在提交时捕获的url:
捕获url的方法的当前代码:
public static string GenerateShortUrl(SPList list, int itemId)
{
try
{
var item = list.GetItemById(itemId);
var itemUrl = string.Empty;
if (item.File == null)
itemUrl = SPContext.Current.Web.Url + "/" + list.Forms[PAGETYPE.PAGE_DISPLAYFORM].Url + "?ID=" + item.ID;
else
itemUrl = SPContext.Current.Web.Url + "/" + item.Url;
var generatedShortedUrl = GetShortUrl(itemUrl);
return generatedShortedUrl;
}
catch (Exception ex)
{
Utilities.WriteError(ex.ToString());
throw new SPException("An error occurred while attempting to shorten a URL.", ex);
}
}
您可以使用捕获所有内容,直到?List=[number]
您可以使用此正则表达式:
Regex.Match(str, @"^.*\?List=\d+").Value
您可以使用捕获所有内容,直到?List=[number]
您可以使用此正则表达式:
Regex.Match(str, @"^.*\?List=\d+").Value
编辑:更改了代码,我以为他只需要提取数字
编辑:更改了代码,我认为他必须只提取数字。有时最困难的方法是最直接的方法。基于正则表达式的答案将返回不符合预期格式的URL的错误值
static void Main(string[] args)
{
string inputString = @"https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?List=36caab7e%2D2234%2D4981%2D8225%%2Easpx";
//TEST CASES:
//string inputString = @"https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?SomeParam=36caab7e%2D2234%2D4981%2D8225%%2Easpx";
//should return null
//string inputString = @"https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?SomeParam=nih543&List=786yui";
//should return https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?786
//string inputString = @"https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?";
//should return null
//string inputString = @"https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx";
//should return null
string result = GetShortenedListURL(inputString);
Console.WriteLine(result);
Console.ReadKey();
}
private static string GetShortenedListURL(string InputString)
{
//Split URL into address and parameter tokens
var tokens = InputString.Split('?');
if (tokens.Length > 1)
{
var urlParams = tokens[1].Split('&');
const string listStarter = "LIST=";
//Loop through parameters looking for one that begins with List
foreach (var param in urlParams)
{
if (param.ToUpperInvariant().StartsWith(listStarter))
{
//Found the right parameter, now look for a contiguous string of numbers
for (int numCounter = listStarter.Length; numCounter < param.Length; numCounter++)
{
if (!Char.IsDigit(param[numCounter]))
{
if (numCounter > listStarter.Length)
{
return tokens[0] + "?" + param.Substring(listStarter.Length, numCounter - listStarter.Length);
}
}
}
}
}
}
return null;
}
有时艰难的道路是最直接的道路。基于正则表达式的答案将返回不符合预期格式的URL的错误值
static void Main(string[] args)
{
string inputString = @"https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?List=36caab7e%2D2234%2D4981%2D8225%%2Easpx";
//TEST CASES:
//string inputString = @"https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?SomeParam=36caab7e%2D2234%2D4981%2D8225%%2Easpx";
//should return null
//string inputString = @"https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?SomeParam=nih543&List=786yui";
//should return https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?786
//string inputString = @"https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx?";
//should return null
//string inputString = @"https://portal.test/sites/test/testabc/Lists/TEST/DispFormSort.aspx";
//should return null
string result = GetShortenedListURL(inputString);
Console.WriteLine(result);
Console.ReadKey();
}
private static string GetShortenedListURL(string InputString)
{
//Split URL into address and parameter tokens
var tokens = InputString.Split('?');
if (tokens.Length > 1)
{
var urlParams = tokens[1].Split('&');
const string listStarter = "LIST=";
//Loop through parameters looking for one that begins with List
foreach (var param in urlParams)
{
if (param.ToUpperInvariant().StartsWith(listStarter))
{
//Found the right parameter, now look for a contiguous string of numbers
for (int numCounter = listStarter.Length; numCounter < param.Length; numCounter++)
{
if (!Char.IsDigit(param[numCounter]))
{
if (numCounter > listStarter.Length)
{
return tokens[0] + "?" + param.Substring(listStarter.Length, numCounter - listStarter.Length);
}
}
}
}
}
}
return null;
}
您完全可以使用正则表达式来实现这一点。正如您所说,字母和特殊字符是唯一可能跟随列表编号的字符,我的正则表达式将拾取所有字符,直到?List=[number],以及任何字母和特殊字符,直到找到不应拾取的数字或字符
Regex.Match(url, @"^.*\?List=\d+[A-Za-z._%+-]*+").Value
请尝试在此处进行测试:您完全可以使用正则表达式来完成此操作。正如您所说,字母和特殊字符是唯一可能跟随列表编号的字符,我的正则表达式将拾取所有字符,直到?List=[number],以及任何字母和特殊字符,直到找到不应拾取的数字或字符
Regex.Match(url, @"^.*\?List=\d+[A-Za-z._%+-]*+").Value
试着在这里测试一下:我更喜欢LINQ:
string url = @"https://portal.test/...";
string flag = "List=";
int flagIndex = url.IndexOf(flag) + flag.Length;
string shortUrl = new string(url.TakeWhile((ch, index) =>
index < flagIndex || char.IsDigit(ch)).ToArray());
我更喜欢林克:
string url = @"https://portal.test/...";
string flag = "List=";
int flagIndex = url.IndexOf(flag) + flag.Length;
string shortUrl = new string(url.TakeWhile((ch, index) =>
index < flagIndex || char.IsDigit(ch)).ToArray());
你可以这样做,即使基地是不一样的捕获一切,直到?然后用更新后的列表值将其推出即使基础不相同,您也可以这样做捕获所有内容,直到?并用更新后的列表值将其推出Hi,感谢您的输入。我只是显示了我所有的方法代码。我应该把forloop放在if语句中吗?我不清楚这个方法是做什么的,因为我不知道SPList类是做什么的。但是,您似乎只需要更改变量generatedShortedUrl=GetShortUrlitemUrl;调用以调用GetShortenedListURL。您必须检查null,这意味着它无法在URL中找到List=,并决定是否要引发异常或执行其他操作。您好,谢谢您的输入。我只是显示了我所有的方法代码。我应该把forloop放在if语句中吗?我不清楚这个方法是做什么的,因为我不知道SPList类是做什么的。但是,您似乎只需要更改变量generatedShortedUrl=GetShortUrlitemUrl;调用以调用GetShortenedListURL。您必须检查null,这意味着它无法在URL中找到List=,并决定是否要抛出异常或执行其他操作。