Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式或标记化匹配字符串中出现的两个单词的第一个匹配项。还考虑到单词之间的距离(5个单词)_Python_Regex - Fatal编程技术网

Python 使用正则表达式或标记化匹配字符串中出现的两个单词的第一个匹配项。还考虑到单词之间的距离(5个单词)

Python 使用正则表达式或标记化匹配字符串中出现的两个单词的第一个匹配项。还考虑到单词之间的距离(5个单词),python,regex,Python,Regex,我需要帮助匹配mystring中的两个单词“hello”和“hope”,但只计算字符串中第一个出现的单词。他们之间的最大距离是5个单词。谢谢你的帮助 mystring=“你好,鲍勃,天气很好,希望你今天过得愉快。你好,简,希望天气很好” 这就是我目前所拥有的。我希望结果只捕捉第一次出现的“hello”和“hope”,然后停止匹配 pattern=re.findall('\bhello(?:\W+\W+{0,5}\W+hope\b',mystring)我不知道如何使用RegEx在一行代码中完成,但

我需要帮助匹配mystring中的两个单词“hello”和“hope”,但只计算字符串中第一个出现的单词。他们之间的最大距离是5个单词。谢谢你的帮助

mystring=“你好,鲍勃,天气很好,希望你今天过得愉快。你好,简,希望天气很好”

这就是我目前所拥有的。我希望结果只捕捉第一次出现的“hello”和“hope”,然后停止匹配


pattern=re.findall('\bhello(?:\W+\W+{0,5}\W+hope\b',mystring)

我不知道如何使用RegEx在一行代码中完成,但您可以使用RegEx完成部分工作,并使用列表理解获得额外的一行代码

mystring = "hello bob nice weather hope you have a good day. hello jan hope weather is nice"
pattern = re.findall('hello(?:\W+\w+){0,5}\W+hope', mystring)
pattern

['hello bob nice weather hope', 'hello jan hope']


new_pattern = [x for x in pattern if len(x.split()) == 5]
new_pattern

['hello bob nice weather hope']

它必须是正则表达式吗?在混合中使用标记化可能更容易解决。是的,它可以是tokenization@MattL。在这种情况下,可以尝试使用标记化,或者简单地删除标点符号并拆分输入。正如您已经了解到的,正则表达式很难阅读和维护。您可以帮助标记化吗@修剪请从中重复和。“演示如何解决此编码问题?”与堆栈溢出无关。您必须诚实地尝试解决方案,然后就您的实现提出具体问题。谢谢@大卫·埃里克森