gpt4 book ai didi

python - 查找另一个字符串后面的第一个匹配项,python regex multiline

转载 作者:行者123 更新时间:2023-12-01 02:48:30 25 4
gpt4 key购买 nike

我知道有人问了很多这样的问题,但我在使用正则表达式语句来解决我的具体问题时遇到了一些麻烦。

我有大量名称不同但格式完全相同的函数,我需要找到特定函数名称后面的第一个匹配项。

请注意,我正在使用 python 搜索 C 文件。

 writecwp_positionStatus(int      action,
u_char *var_val,
u_char var_val_type,
size_t var_val_len,
u_char *statP,
oid *name,
size_t name_len) {

static long intval;
static long old_intval;

switch ( action ) {
case RESERVE1:
if (var_val_type != ASN_INTEGER) {
fprintf(stderr, "write to mib not ASN_INTEGER\n");
return SNMP_ERR_WRONGTYPE;
}
if (var_val_len > sizeof(long)) {
fprintf(stderr,"write to mib: bad length\n");
return SNMP_ERR_WRONGLENGTH;
}
intval = *((long *) var_val);
break;

case RESERVE2:
break;

case FREE:
/* Release any resources that have been allocated */
break;

case ACTION:
/*
* The variable has been stored in 'value' for you to use,
* and you have just been asked to do something with it.
* Note that anything done here must be reversable in the UNDO case
*/
old_intval = starting_int;
starting_int = intval;
break;

case UNDO:
/* Back out any changes made in the ACTION case */
starting_int = old_intval;
break;

case COMMIT:
/*
* Things are working well, so it's now safe to make the change
* permanently. Make sure that anything done here can't fail!
*/
break;
} return SNMP_ERR_NOERROR;

}

在这个例子中,我想找到第一个“old_intval =starting_int;”遵循函数名称“writecwp_positionStatus”。将会有更多具有相同主体但名称不同的函数。

我的想法是设置一个捕获组来匹配:

(function name)(everything in between including newlines)(line to replace)

我尝试了很多不同的选项,例如,但似乎每次都偏离一点点:

(writecwp_positionStatus\(.*\s)((.*\s)*?)(\s*old_intval = starting_int;)

最佳答案

我建议使用这个正则表达式。

(writecwp_positionStatus[\s\S]*?)old_intval = starting_int;([\s\S]*)

这里的方法是捕获从函数名到要被捕获组 01 替换的语句的所有内容,然后通过捕获组 02 匹配语句后面的所有内容>

\s -> whitespace character (a space, a tab, a line break, or a form feed).
\S -> non-white space character.
*? -> ? after quantifiers makes them lazy/non-greedy.

现在要替换该语句,我们可以使用另一个正则表达式:

\1 >>>I am the replacement<<< \2

这里,

\1 -> Everything before the statement.
\2 -> Everything after the statement.

为了更好地理解,请做实验 here 。我希望这就是您想要的。

关于python - 查找另一个字符串后面的第一个匹配项,python regex multiline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45061112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com