非常感谢你的帮助。
我有一个包含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'),并且注释可能不是问题。