我不确定如何用我的搜索来表达我需要的东西。我在大型代码库中有以下行的实例
$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,
和)
中的应该一起删除。
答案 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
调用中的参数有括号,这种方法将不起作用。