如何使用indexof和substring从字符串中提取特定文本?

时间:2015-05-22 11:34:57

标签: c# .net

我有这个字符串,我使用了Substring,但它不是我想要的。 我想删除从索引39开始的字符串中的部分。 然后从另一个索引中删除另一个部分。 并最终重建字符串。

string test = "http://test.com/attachment.php?s=21c4a95ffd0c8110e18a44ace2468fb3&attachmentid=85411&d=1432094822";
test = test.Substring(39);

最后字符串应如下所示:

http://test.com/attachment.php?attachmentid=85411&d=1432094822

2 个答案:

答案 0 :(得分:4)

您应该使用System.Uri来解析网址,而不是更安全。

var uri = new System.Uri(HttpUtility.HtmlDecode("http://test.com/attachment.php?s=21c4a95ffd0c8110e18a44ace2468fb3&attachmentid=85411&d=1432094822"));
var leftPart = uri.GetLeftPart(UriPartial.Path);

var queryStringParts = HttpUtility.ParseQueryString(uri.Query);

var uriBuilder = new UriBuilder(leftPart);
uriBuilder.Query = string.Format("attachmentid={0}&d={1}", 
    HttpUtility.UrlEncode(queryStringParts.Get("attachmentid")), 
    HttpUtility.UrlEncode(queryStringParts.Get("d")));

var result = uriBuilder.ToString();

答案 1 :(得分:3)

以下是Daniel的类似方法:

string finalurl = null;
string url = "http://test.com/attachment.php?s=21c4a95ffd0c8110e18a44ace2468fb3&attachmentid=85411&d=1432094822";
Uri uri;
if(Uri.TryCreate(url, UriKind.Absolute, out uri))
{
    var queryString = url.Substring(url.IndexOf('?')).Split('#')[0];
    string decoded = System.Web.HttpUtility.HtmlDecode(queryString);
    var nameVals = System.Web.HttpUtility.ParseQueryString(decoded);
    nameVals.Remove("s"); // remove your undesired parameter
    finalurl = String.Format("{0}{1}{2}{3}?{4}"
            , uri.Scheme, Uri.SchemeDelimiter, uri.Authority, uri.AbsolutePath
            , nameVals.ToString());
}

您需要添加对System.Web.dll的引用。