正则表达式和内联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

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

好吧,最简单的是:

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

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

虽然这很疯狂,我不建议使用它,但您可以使用awk:执行类似操作

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

您可能需要修改[^ .]部分,以正确地决定什么是单词的一部分。

  1. 这在与<Location>的线路上运行
  2. 保存部分线路直到<Location>
  3. 打印它找到的四个字。(注意如果没有匹配项,它将打印以前保存的行部分。)

您需要的正则表达式必须是基于正向lookhead的。对于您的2个案例,以下作品:

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

如果您需要使用上面的regex进行演示,请告诉我。

最新更新