正则表达式找到一个地方并将找到的内容替换到另一个地方

时间:2018-04-17 11:58:40

标签: regex

我正在尝试创建一个正则表达式,它将找到一个地方,获取其内容并将其放置在同一行的另一个地方。

我已经完成了我能找到所需信息的位置:

(?<=\{)(.*\n?)(?=\})
(?<=type=")(.*\n?)(?=" perm)

示例字符串:

<parameter name="some name" value="VALU" type="" perm="" ncpv="1"><doc></doc></parameter>  \type{INT}\ro some documentation

在这个例子中,我想将“INT”放入“type =”“”所以它会变成:

<parameter name="some name" value="VALU" type="INT" perm="" ncpv="1"><doc></doc></parameter>  \type{INT}\ro some documentation

到目前为止,我有一个部分找到放置信息的地方和我想要信息的地方,但我不确定如何移动信息并合并两个正则表达式。

1 个答案:

答案 0 :(得分:0)

对于您展示的简单示例,您可以执行(我在file中保存了示例字符串):

$ sed -E 's|type=""(.*)(\\type\{([^}]+)\}.*)|type="\3"\1\2|' file 
<parameter name="some name" value="VALU" type="INT" perm="" ncpv="1"><doc></doc></parameter>  \type{INT}\ro some documentation

但是,这非常脆弱,很可能会失败。例如,如果您的行具有多个\type{实例,它只会更改type=为空的行(type=""),它将不会处理嵌套标记,或者标签分为多行的情况。

与往常一样,使用专用的XML解析器是可行的方法,但这适用于简单的情况。