使用正则表达式划分两个单词并捕获第一个单词

时间:2019-01-20 07:03:45

标签: python regex

以下是带有词性标记的句子:所有/ DT动物/ NNS是/ VBP等于/ JJ,/, 但是/ CC一些/ DT动物/ NNS比/ IN其他/ NNS多/ VBP / RBR相等/ JJ。

如何编写仅与句子中每个单词/ pos-tag的单词匹配的正则表达式。

text="""All/DT animals/NNS are/VBP equal/JJ ,/, but/CC some/DT animals/NNS 
are/VBP more/RBR equal/JJ than/IN others/NNS ./."""
tokens=nltk.word_tokenize(text)
pattern="([A-Za-z]+)|[A-Za-z]"
print("Upper case words:")
for tok in tokens:
   if re.search(pattern, tok) is not None:
      print("'{}'".format(tok))

2 个答案:

答案 0 :(得分:2)

使用re.findall

import re
print (re.findall(r'([a-zA-Z]+)/[a-zA-Z]+',text))
#['All', 'animals', 'are', 'equal', 'but', 'some', 'animals', 'are', 'more', 'equal', 'than', 'others']

答案 1 :(得分:0)

您可以使用以下正则表达式:

(\S+)\/\S+\s?

说明:

(\S+)是一个与任何非空白字符匹配的捕获组
/与字符/
匹配 \S+匹配非空格字符,但这次未被捕获
\s?末尾的可选空间

Here's a link测试正则表达式并获得说明

@Transhuman建议使用re.findall来获取所有匹配项:

import re
print (re.findall(r'(\S+)/\S+\s?',text))

您可以测试python代码here