使用C#的正则表达式删除匹配的前缀和后缀并保留部分

时间:2015-02-08 07:20:37

标签: c# regex

我不确定如何用我的搜索来表达我需要的东西。我在大型代码库中有以下行的实例

$utils.decode(Coding.ASCII, 213)
$utils.decode(Coding.ASCII, itemId)
$utils.decode(Coding.ASCII, data.id)

我需要将它们更改为

213
itemId
data.id

或一般来说,替换

dasf->fd.fer$%#tewqeqABCDE#@S$%D
dasf->fd.fer$%#tewqeqCDEF#@S$%D
dasf->fd.fer$%#tewqeqFGHITP#@S$%D

ABCDE
CDEF
FGHITP

前缀和后缀始终相关且始终相同。 如何在C#中使用正则表达式形成这样的模式?我也想知道,这种模式匹配叫什么?

修改

我试过这个

Regex regex = new Regex("\\$utils\\.decode\\(Coding\\.ASCII, (.*)\\)");
inStr = regex1.Replace(inStr, "$1");

但无法使其发挥作用

修改

这是@Enigmativity的一个例子

$item.save(
    $utils.decode(Coding.ASCII, 213),
    $utils.decode(Coding.ASCII, itemId),
    $utils.decode(Coding.ASCII, data.id),
    currDate(),
    $user
);

...

$item.get(
    $utils.encode(Coding.ASCII, 213),
    currDate(),
    $user
);

...

$item.calculatePrice(
    $utils.decode(Coding.ASCII, itemId)
);
上面的文字$utils.decode(Coding.ASCII,)中的

应该一起删除。

1 个答案:

答案 0 :(得分:1)

这对我有用:

var result =
    Regex
        .Replace(
            code,
            Regex.Escape("$utils.decode(Coding.ASCII, ")
                + "(.*?)"
                + Regex.Escape(")"),
            "$1");

所以,从这个:

    var code = @"$item.save( $utils.decode(Coding.ASCII, 213), $utils.decode(Coding.ASCII, itemId), $utils.decode(Coding.ASCII, data.id), currDate(), $user );

... $item.get( $utils.encode(Coding.ASCII, 213), currDate(), $user ); ...

$item.calculatePrice( $utils.decode(Coding.ASCII, itemId) );";

我明白了:

$item.save( 213, itemId, data.id, currDate(), $user );

... $item.get( $utils.encode(Coding.ASCII, 213), currDate(), $user ); ...

$item.calculatePrice( itemId );

"(.*?)"只是捕获一组零个或多个字符,但尽可能少。这样做的缺点是它不会平衡括号,所以如果$utils.decode调用中的参数有括号,这种方法将不起作用。