首页 > 解决方案 > 从特定单词中提取单词直到下一个标点符号[Python Regex]

问题描述

我对编程真的很陌生,我正在努力处理一些正则表达式代码。

我想要做的是从一些特定的单词中提取单词,直到下一个标点符号 ( . , ? !) 我已经设法捕捉到我的特定单词之后的单词,但是通过接下来的 6 个单词。

顺便说一句,我的代码是用 Python 编写的,这里是:

words_to_find = r"(?<=ou est )\w*\s*\w*\s*\w*\s*\w*\s*\w*|" \
        r"(?<=ou se trouve )\w*\s*\w*\s*\w*\s*\w*\s*\w*|" \
        r"(?<=ou se situe )\w*\s*\w*\s*\w*\s*\w*\s*\w*"
found_words = re.findall(words_to_find, sentence, flags=re.IGNORECASE)

如您所见,我捕捉文字的方式并不是很漂亮。“ou est”、“ou se trouve”和“ou se situe”是我的专用词,用法语说“where is”是不同的方式。

\w*\s无论如何,为了在下一个标点符号之前捕获单词,替换所有这些“”的最佳方法是什么?还有一件事:我的代码将使用的字符串被我的解析器完全清理,所以不会有任何大写、破折号、撇号或其他任何东西,只有小写字母和它们之间的空格。

标签: pythonregex

解决方案


一种方法是这样的

(?<=ou est )[^,.!?\n]+

这里[^,.!?\n]代表单词中不允许出现的所有标点符号 to catch。在第一次出现这些字符中的一个之前,您将全部捕获。您可以使用 regex101 对其进行测试:https ://regex101.com/r/PCeySp/1/

另一种方法可能是

(?<=ou est )(\s*\w+)+

在这里,您可以捕获\s*\w+任意次数。https://regex101.com/r/0lO4u7/1


推荐阅读