使用REGEX在逗号周围交换术语的顺序,其中术语具有特定的类


对于这种事,我实在无能为力

非常感谢你的帮助。

我有一个包含80000个术语的列表,格式如下:

<term>
    <termId>100323N166777388LGH3cj24jYcDY75lTgZl</termId>
    <termName>term1</termName>
    <termType>UNUSE</termType>
       <relation>
      <relationType>USE</relationType>
      <termId>OMITERMO6650</termId>
      <termName>term3, term4</termName>
    </relation>
  </term>
  <term>
    <termId>OMITERMO6650</termId>
      <termName>term3, term4</termName>
    <termType>Pt</termType>
     </term>

是否可以编写一个正则表达式(或其他任何其他查找和替换在notepad++中)来交换术语的顺序,如果在具有<termType>Pt</termType>并在<relation>属性中引用的标记中存在逗号。在这个例子中,第3项和第4项互换了。

不是所有的PT术语都在<relation>中被引用,但是它们所在的位置也需要交换。而且,并不是所有的术语都有逗号分隔值,所以它们应该被忽略

希望这是有意义的,非常感谢!
echo "<termName>term3, term4</termName>" | sed -E 's/<termName>(.*), (.*)</termName>/<tN>2, 1</tn>/' 
<tn>term4, term3</tn>

当然我只是用'tn'作为缩写。notepad++中的Regex可能会有所不同-也许您必须用反斜杠掩盖括号。它在termName内部到处交换-我希望我理解对了。

它对注释不敏感,也不匹配标签,跨越多行。当然,对于第二种情况,在此之前很容易测试文件(grep for all 'termnames'),并且注释可能不是问题。

最新更新