0

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

情况1:

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

案例二:

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

在这两种情况下,我都想在位置标签前抓住 4 个单词。

输出:

情况1:

used to live in

案例二:

</Organizattion> which is in

这可能吗 ??谁能帮帮我吗 ?

4

3 回答 3

1

好吧,最简单的是:

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

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

于 2012-03-12T14:45:55.247 回答
0

虽然这很疯狂,我不建议使用它,但您可以使用以下方法执行以下操作awk

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

您可能想要修改这些[^ .]部分以正确确定单词的一部分。

  1. 这与<Location>
  2. 保存部分行直到<Location>
  3. 打印它找到的四个单词。(请注意,如果没有匹配,它将打印先前保存的行部分。)
于 2012-03-12T15:04:32.267 回答
0

您需要的正则表达式必须基于正面的外观。对于您的 2 种情况,以下作品:

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

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

于 2012-03-12T15:06:38.180 回答