替换两个字符之间的字符

时间:2017-04-26 14:48:48

标签: c# regex string

我试图操纵一个字符串,我想删除其中的一些字符。

示例场景:

abc-def-c?p=2&x=5&z=6

我想替换从p开始的所有字符,并在下一个&?之后使用空字符替换字符。以某种方式删除它们。

输入:abc-def-c?p=2&x=5&z=6

输出:abc-def-c?x=5&z=6

我知道我可以通过SubstringIndexOfReplace实现这一目标,但遗憾的是,p,x,y部分可能始终不按此顺序存在问题。我需要的东西只能找到部分并替换它。

我的正则表达能力不是很好,所以任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

(?<=[?&])p=.*?(?:&|$)

它匹配前面带有p=?&)的(?<=[?&]),后跟一个以&或字符串结尾终止的字符串值( (?:&|$)

Demo

答案 1 :(得分:0)

我不喜欢正则表达式,所以如果你是相同的话,你可以使用在这个问题的答案之一中发布的类;

Get url parameters from a string in .NET

将查询字符串转换为字典,然后只删除除要忽略的键之外的所有键...

答案 2 :(得分:0)

检查输入包含 p = ,如下例所示:

显示的方法

public static string cleanString(string input)
{
    if (input.Contains("p=") && input.Contains("&"))
    {
        int startPos = input.IndexOf("p=");
        int endPos = input.IndexOf("&",startPos);
        input = input.Substring(0,startPos) + 
                                       input.Substring(endPos+1,(input.Length-1)-endPos);
    }

    return input;
}

<强>用法

cleanString("abc-def-c?p=2&x=5&z=6"));
cleanString("abc-def-c?"));