我想从包含特定字符(/ IN)的字符串中提取单词,直到其他特定字符(/ NNP)。到目前为止我的代码(仍然不起作用):
import re
sentence = "Entah/RB kenapa/NN ini/DT bayik/NN suka/VBI banget/JJ :/: )/CP :/: )/CP :/: )/CP berenang/VBI di/IN Jln/NN Terusan/NNP Borobudur/NNP dan/NN di/IN Jalan/NN Perempatan/ADJ Malioboro/NNP"
tes = re.findall(r'((?:\S+/IN\s\w+/NNP\s*)+)', sentence)
print(tes)
因此sentence
包含我想提取的单词di/IN Jln/NN Terusan/NNP Borobudur/NNP
和di/IN Jalan/NN Perempatan/ADJ Malioboro/NNP
。预期结果:
['di/IN Jln/NN Terusan/NNP Borobudur/NNP', 'di/IN Jalan/NN Perempatan/ADJ Malioboro/NNP']
执行此任务的最佳方法是什么?感谢。
答案 0 :(得分:1)
使用
r'\S+/IN\b(?:(?!\S+/IN\b).)+\S+/NNP\b'
请参阅regex demo
<强>详情
\S+
- 1个非空白符号/IN\b
- /IN
子字符串作为整个单词(?:(?!\S+/IN\b).)+
- 除了与\S+/IN\b
模式序列不匹配的换行符之外的任何1个字符(使用re.DOTALL
来匹配换行符)\S+/NNP\b
- 1个非空格,/NNP
作为整个单词(因为\b
是单词边界)