我有一个内联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
这可能吗?有人可以帮帮我吗?
答案 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
您可能希望修改[^ .]
部分以正确判断单词的哪一部分。
<Location>
<Location>
答案 2 :(得分:0)
你需要的正则表达式必须是一个积极的表面。对于以下作品的2个案例:
/(?:[<>\/\w]+\s*){4}(?=<Location>)/s
如果您需要使用上述正则表达式进行演示,请告诉我。