替换字符串中的整个值

时间:2013-05-22 13:17:34

标签: .net regex

我有一个包含一些id的字符串,基本上是一个字符串中的sql表达式。我需要以更友好的方式向用户呈现它,即。用数据库中的名称替换id。问题是有些ID是个位数,有些是2位数。因此,当我搜索并替换单个数字时,它还会替换部分 2位数字符串。例如,如果原始字符串是:

    id not in (2, 3, 4) and id > 22

当我执行搜索并替换2时,数字222都会被替换。

使用正则表达式我可以找到2,但是当我替换它时(正则表达式基本上查找我想要的数字和一些可能的分隔符,如空格,()等)。是否可以替换此数字但保留这些分隔符?

这就是我现在所拥有的:

Regex.Replace(returnValue
               , String.Format("[,( )]{0}[,( )]", number)
               , replaceValue)

4 个答案:

答案 0 :(得分:2)

这样的东西?

string input = "id not in (2, 3, 4) and id > 22";
var newstr = Regex.Replace(input, @"\d+", m => GetUserName(m.Value));


string GetUserName(string s)
{
    return ">>" + s  + "<<";
}

答案 1 :(得分:0)

将正则表达式更改为用户向前看并向后看 - 所以您的模式看起来像这样

"(?<=[^0-9]){0}(?=[^0-9])"

或者如果你喜欢你的代码示例

Regex.Replace(returnValue
    , String.Format("(?<=[^0-9]){0}(?=[^0-9])", number)
    , replaceValue)

所以我们说:

(?<=[^0-9])查看我们匹配的项目,并确保它不是整数

{0}匹配的商品

(?=[^0-9])向前看我们匹配的项目并确保它不是整数

答案 2 :(得分:0)

您需要使用负面外观,如下所述:Regular expression for 10 digit number without any special characters

对于你的例子:

const string input = "id not in (2, 3, 4) and id > 22";
string result = Regex.Replace(input, @"(?<!\d)(\d{1})(?!\d)", @"--$1--");

结果:

“id不在( - 2--, - 3--, - 4--)和id&gt; 22”

答案 3 :(得分:0)

I4V 建议的模式对我来说看起来最简单,但您也可以尝试这种模式:

(\d+)(?=[,\)])

这种模式背后的想法是,有时我们在column names中有数字Address1Address2,所以使用它也会与它们匹配。这种模式不允许这些情况。

希望它会有所帮助!

修改

List<int> replacements = new List<int>(new int[] { 5 , 6 , 7});
string input = "id not in (2, 3, 4) and id > 22";

foreach(int element in replacements)
   input = Regex.Replace(input,@"(\d+)(?=[,\)])",element.ToString());

下面:

ID 2将被替换为5,3将被替换为6,而4将被替换为7.所以finall字符串将如下所示:

id not in (5, 6, 7) and id > 22