【问题标题】:How to extract some words pattern from string using regex in python如何在python中使用正则表达式从字符串中提取一些单词模式
【发布时间】:2017-04-13 06:17:10
【问题描述】:

我想从包含特定字符 (/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']

完成这项任务的最佳方法是什么?谢谢。

【问题讨论】:

    标签: python regex string pattern-matching


    【解决方案1】:

    使用

    r'\S+/IN\b(?:(?!\S+/IN\b).)+\S+/NNP\b'
    

    见regex demo

    详情

    • \S+ - 1+ 个非空白符号
    • /IN\b - 一个 /IN 子字符串作为一个完整的单词
    • (?:(?!\S+/IN\b).)+ - 除换行符之外的任何 1+ 个字符,不匹配 \S+/IN\b 模式序列(也使用 re.DOTALL 来匹配换行符)
    • \S+/NNP\b - 1+ 个非空格,/NNP 是一个完整的单词(因为 \b 是一个单词边界)

    【讨论】:

    • 尝试: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 d/NN /NNP dan/NN di/IN Jalan/NN Perempatan/ADJ Malioboro/NNP" 在前两个 NNP 之间添加 d/NN。
    • 还是不行。除此之外,它也不包括/IN 和/NNp 之间没有字符串的情况。
    • @Kasramvd:它们之间一定有什么,至少会有一个空格,因此+量词是正确的。
    • 我的意思是空间。它不符合那种情况。测试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 d/IN /NNP dan/NN di/IN Jalan/NN Perempatan/ADJ Malioboro/NNP"
    • 记号可以为空并归类为名词吗?这很奇怪,但[^\s/]*/IN\b(?:(?![^\s/]*/IN\b).)+[^\s/]*/NNP\b 会涵盖这一点。
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2017-12-17
    • 2011-03-09
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多