我希望读入一个 XML 文件,找到所有同时包含标记<emotion>
和标记<LOCATION>
的句子,然后将这些整个句子打印到一个唯一的行。这是代码示例:
import re
text = "Cello is a <emotion> wonderful </emotion> parakeet who lives in <LOCATION> Omaha </LOCATION>. He is the <emotion> best </emotion> singer <pronoun> I </pronoun> have ever heard."
out = open('out.txt', 'w')
for match in re.findall(r'(?:(?<=\.)\s+|^)((?=(?:(?!\.(?:\s|$)).)*?\bwonderful(?=\s|\.|$))(?=(?:(?!\.(?:\s|$)).)*?\bomaha(?=\s|\.|$)).*?\.(?=\s|$))', text, flags=re.I):
line = ''.join(str(x) for x in match)
out.write(line + '\n')
out.close()
这里的正则表达式抓取所有带有“精彩”和“奥马哈”的句子,并返回:
Cello is a <emotion> wonderful </emotion> parakeet who lives in <LOCATION> Omaha </LOCATION>.
这是完美的,但我真的想打印所有包含<emotion>
and的句子<LOCATION>
。但是,由于某种原因,当我将上面正则表达式中的“精彩”替换为“情感”时,正则表达式无法返回任何输出。因此,以下代码不会产生任何结果:
import re
text = "Cello is a <emotion> wonderful </emotion> parakeet who lives in <LOCATION> Omaha </LOCATION>. He is the <emotion> best </emotion> singer I have ever heard."
out = open('out.txt', 'w')
for match in re.findall(r'(?:(?<=\.)\s+|^)((?=(?:(?!\.(?:\s|$)).)*?\bemotion(?=\s|\.|$))(?=(?:(?!\.(?:\s|$)).)*?\bomaha(?=\s|\.|$)).*?\.(?=\s|$))', text, flags=re.I):
line = ''.join(str(x) for x in match)
out.write(line + '\n')
out.close()
我的问题是:如何修改我的正则表达式以便只抓取那些同时包含<emotion>
and的句子<LOCATION>
?对于其他人可以在这个问题上提供的任何帮助,我将不胜感激。
(对于它的价值,我也在努力在 BeautifulSoup 中解析我的文本,但想在认输之前给正则表达式最后一枪。)