正则表达式和内联XML

时间:2012-03-12 14:18:17

标签: xml regex xml-parsing inline-xml

我有一个内联XML文件(xml标签+文本)。 我想在特定标签之前抓住4个单词。 例如:

案例1:

I used to live in <Location>London</Location>.

案例2:

I work for <Organization> Microsoft Tech.</Organization>
which is in <Location>London</Location>

我想在两种情况下在位置标记之前抓取4个单词。

输出:

案例1:

used to live in

案例2:

</Organizattion> which is in

这可能吗?有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:1)

嗯,最简单的是:

((?:\S+\s+){4}\s*)<Location>

请注意,这不会在第二种情况下产生所需的结果,因为它假定由空格分隔的非空白运行,因此它会在那里产生Tech.</Organization> which is in

答案 1 :(得分:0)

虽然这很疯狂,我不建议使用它,你可以用awk做这样的事情:

awk '/<Location>/ {n=gensub("(.*)<Location>.*","\\1","g",$0); print gensub(".*[ .]([^ .]+ [^ .]+ [^ .]+ [^ .]+) *$","\\1","g",n)} ' INPUTFILE

您可能希望修改[^ .]部分以正确判断单词的哪一部分。

  1. 此操作适用于<Location>
  2. 将部分行保存到<Location>
  3. 打印出它找到的四个单词。 (注意没有匹配它将打印以前保存的行部分。)

答案 2 :(得分:0)

你需要的正则表达式必须是一个积极的表面。对于以下作品的2个案例:

/(?:[<>\/\w]+\s*){4}(?=<Location>)/s

如果您需要使用上述正则表达式进行演示,请告诉我。