我有一个内联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
您可能需要修改[^ .]
部分,以正确地决定什么是单词的一部分。
- 这在与
<Location>
的线路上运行 - 保存部分线路直到
<Location>
- 打印它找到的四个字。(注意如果没有匹配项,它将打印以前保存的行部分。)
您需要的正则表达式必须是基于正向lookhead的。对于您的2个案例,以下作品:
/(?:[<>/w]+s*){4}(?=<Location>)/s
如果您需要使用上面的regex进行演示,请告诉我。