![](/img/trans.png)
[英]Python extract 3 words before and 3 words after a specific list of words with a regex
[英]Extract list of words with specific character from string using regex in Python
我有一个包含单词的字符串,每个单词都有其自己的标记(例如NN / NNP / JJ等)。 我想使用包含NNP令牌的特定重复单词 。 到目前为止,我的代码:
import re
sentence = "Rapunzel/NNP Sheila/NNP let/VBD down/RP her/PP$ long/JJ golden/JJ hair/NN in Yasir/NNP"
tes = re.findall(r'(\w+)/NNP', sentence)
print(tes)
代码的结果:
['Rapunzel', 'Sheila', 'Yasir']
我们看到,包含NNP的单词有3个,分别是Rapunzel / NNP Sheila / NNP(彼此相邻出现)和Yasir / NNP(与其他NNP单词分开)。 我的问题是我需要用重复的NNP和另一个来区分单词。 我的预期结果是:
['Rapunzel/NNP', 'Sheila/NNP'], ['Yasir/NNP']
谢谢,执行此任务的最佳方法是什么。
将组作为简单字符串进行匹配,然后将它们拆分:
>>> [m.split() for m in re.findall(r"\w+/NNP(?:\s+\w+/NNP)*", sentence)]
[['Rapunzel/NNP', 'Sheila/NNP'], ['Yasir/NNP']]
使用其他捕获组,您可以非常接近预期的结果。
>>> re.findall(r'((?:\w+/NNP\s*)+)', sentence)
['Rapunzel/NNP Sheila/NNP ', 'Yasir/NNP']
捕获组((?:\\w+/NNP\\s*)+)
将所有\\w+/NNP
模式以及它们之间的可选空格组合在一起。
这是没有任何正则表达式的替代方法。 它使用groupby
和split()
:
from itertools import groupby
string = "Rapunzel/NNP Sheila/NNP let/VBD down/RP her/PP$ long/JJ golden/JJ hair/NN in Yasir/NNP"
words = string.split()
def get_token(word):
return word.split('/')[-1]
print([list(ws) for token, ws in groupby(words, get_token) if token == "NNP"])
# [['Rapunzel/NNP', 'Sheila/NNP'], ['Yasir/NNP']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.