如何在python中使用正则表达式从字符串中提取一些单词模式

时间:2017-04-13 06:17:10

标签: python regex string pattern-matching

我想从包含特定字符(/ 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/NNPdi/IN Jalan/NN Perempatan/ADJ Malioboro/NNP。预期结果:

['di/IN Jln/NN Terusan/NNP Borobudur/NNP', 'di/IN Jalan/NN Perempatan/ADJ Malioboro/NNP']

执行此任务的最佳方法是什么?感谢。

1 个答案:

答案 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是单词边界)