0

所以我的字符串如下:

TESTA:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
TESTB:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
TESTC:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin

我需要的输出是:

TESTA:out_stra.bin;out_strb.bin;out_strc.bin
TESTB:out_stra.bin;out_strb.bin;out_strc.bin
TESTC:out_stra.bin;out_strb.bin;out_strc.bin

我尝试使用字符串正则表达式,但没有得到所需的输出。这是我尝试过的:

string(REGEX REPLACE "C:/Users/mycode/.*/\./.*/"
       "" TEMP
       <inputfilecontent>) 

将不胜感激任何帮助。谢谢。

4

2 回答 2

0

正则表达式.匹配任何字符,包括分号 ( ;) 和换行符 ( \n)。这就是为什么.*您的正则表达式的一部分与文件的所有中间“记录”匹配的原因。

因此,您需要.在您的正则表达式中替换为[^;\n],这与您的记录的分隔符不匹配:

string(REGEX REPLACE "C:/Users/mycode/[^;\n]*/\./[^;\n]*/"
       "" TEMP
       "<inputfilecontent>")

另请注意,您需要将文件内容括在双引号中。问题是您的文件包含分号;,不带引号的形式被 CMake 解释为参数分隔符

string(REGEX REPLACE)的特殊之处在于它连接所有输入参数,因此没有引号的分号将丢失。


可运行示例:

cmake_minimum_required(VERSION 3.10)

project(replace_lines)

set(LINES
[=[
TESTA:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
TESTB:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
TESTC:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
]=]
)
message(STATUS "Lines: ${LINES}")

string(REGEX REPLACE "C:/Users/mycode/[^;\n]*/\./[^;\n]*/"
    "" RESULT
    "${LINES}"
)

message(STATUS "Result: ${RESULT}")

输出:

-- Lines: TESTA:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
TESTB:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin
TESTC:C:/Users/mycode/dir_a/./result_a/out_stra.bin;C:/Users/mycode/dir_b/./result_b/out_strb.bin;C:/Users/mycode/dir_c/./result_c/out_strc.bin

-- Result: TESTA:out_stra.bin;out_strb.bin;out_strc.bin
TESTB:out_stra.bin;out_strb.bin;out_strc.bin
TESTC:out_stra.bin;out_strb.bin;out_strc.bin
于 2021-11-11T17:08:34.487 回答
0

感谢你们所有的回答,我能够找到最终的解决方案,在添加@WiktorStribiżew 解决方案之前必须做一些事情。我必须做

string(REGEX REPLACE ";" "\\\\;" output "${input}")

使解决方案与“;”一起工作

于 2021-11-12T08:43:06.940 回答