regex 在两个特定字符串之间找到一个字符串,捕获中间的字符串,并使用正则表达式在Python中用新字符串替换所有内容

o8x7eapl  于 2022-11-18  发布在  Python
关注(0)|答案(1)|浏览(114)

我正在重构一些代码,我想用Python自动化其中的一些,下面是我正在尝试做的:
假设我有一个初始字符串,比如'void testsuite_testname(void)',我想用'TEST_F(other_stuff,testname)'替换所有这些字符串。
因此,正如您所看到的,我需要从第一个字符串中提取testname,并使用它来创建新的字符串。
到目前为止,我一直在尝试使用正则表达式来实现这一点,以下是我发现的正确进行模式识别的方法:
string = 'void testsuite_testname(void)
string2 = re.sub('void testsuite_(\S*)\(void\)', 'TEST_F(other_stuff, **??????**)', string)
但是,我不知道应该如何反向引用\S* 部分。如有任何帮助,我们将不胜感激。

iaqfqrcu

iaqfqrcu1#

试试看:

import re

string = 'void testsuite_testname(void)'

result = re.search(r"void testsuite_(\w+)\(void\)", string)

string2 = 'TEST_F(other_stuff, ' + result.group(1) + ')'

print(string2)

#Output: TEST_F(other_stuff, testname)

string = 'void testsuite_testname(void)'这是第一个字符串。
re.search()第一个参数是模式r"void testsuite_(\w+)\(void\)",第二个参数是字符串string
result = re.search(r"void testsuite_(\w+)\(void\)", string)在字符串string中搜索特定模式,然后将(\w+)的结果保存在第一捕获组内\w表示任何单词字符,它等于[a-zA-Z0-9_]这表示匹配从az或从AZ的任何字符,或从09或下划线_+符号表示在一次和无限次之间尽可能多地匹配先前的令牌,这表示至少匹配一个单词字符或多于一个单词字符,因此它将继续匹配testsuite_之后的任何单词字符,直到它到达(void)(,然后它将停止并将结果testname保存在捕获组内
result.group(1)这是访问第一个捕获组中的值的方法。

相关问题