我正在重构一些代码,我想用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* 部分。如有任何帮助,我们将不胜感激。
1条答案
按热度按时间iaqfqrcu1#
试试看:
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_]
这表示匹配从a
到z
或从A
到Z
的任何字符,或从0
到9
或下划线_
,+
符号表示在一次和无限次之间尽可能多地匹配先前的令牌,这表示至少匹配一个单词字符或多于一个单词字符,因此它将继续匹配testsuite_
之后的任何单词字符,直到它到达(void)
的(
,然后它将停止并将结果testname
保存在捕获组内result.group(1)
这是访问第一个捕获组中的值的方法。