Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 用于单词排除的正则表达式_Python_Regex - Fatal编程技术网

Python 用于单词排除的正则表达式

Python 用于单词排除的正则表达式,python,regex,Python,Regex,我正在尝试编写一个只匹配字符串中第一个和第三个单词的正则表达式: term1 and term2 我的第一次尝试是[^\s|和]+,但是失败了,因为 term1 anbd term2 给我这3个匹配项:['term1','b','term2'],而我希望它返回['term1','anbd','term2']只匹配第一个和第三个单词:\S+\S+\S+\S+\S+ 编辑:如果你的意思是“匹配除单词和之外的所有单词”,那么:\b?!而且\b\S+\b我刚刚测试了这个,它可以工作: \b([^a]

我正在尝试编写一个只匹配字符串中第一个和第三个单词的正则表达式:

term1 and term2
我的第一次尝试是[^\s|和]+,但是失败了,因为

term1 anbd term2

给我这3个匹配项:['term1','b','term2'],而我希望它返回['term1','anbd','term2']

只匹配第一个和第三个单词:\S+\S+\S+\S+\S+


编辑:如果你的意思是“匹配除单词和之外的所有单词”,那么:\b?!而且\b\S+\b

我刚刚测试了这个,它可以工作:

\b([^a].*?\b|a[^n].*?\b|an[^d].*?\b)

考虑使用正则表达式,而不是正则表达式

sentence.split()[:3:2]
乙二醇

您可以使用此正则表达式\b\w+\b将句子拆分为单词,然后取第一个和第三个

import re
pat = re.compile(r'\b\w+\b')  # pre-compile the pattern
# for this example the pre-compiling doesn't really matter.
temp = re.findall(pat, "Hello, beautiful world!")
lst = [temp[0], temp[2]]  # sets lst to ["Hello", "world"]
[]环绕字符类-一组要匹配或不匹配的字符。您的正则表达式会显示一个或多个字符,其中没有一个是、a、n或d,这就是您得到结果的原因

要对这类事情做出正确的回答,需要提出正确的问题。这个词和你的情况有什么特别之处?你想要每个不是和的单词,还是想要字符串中的第一个和第三个单词,不管这些单词是什么,还是仅仅是什么

在第二种情况下,您对所需输出的描述听起来像是希望每个单词都不是和。有更简单的方法来实现这一点。正则表达式并没有人们希望的那么有用

字符串的拆分方法将其拆分为单词。从那里,我们可以使用列表理解来过滤掉所有的单词。它看起来像:

[word for word in sentence.split() if word != "and"]

看到了吗?这实际上是简单的英语。

这是使用正则表达式的最佳解决方案。匹配一个单词至少一个非空白,然后吃掉空白,吃掉另一个单词,吃掉更多空白,然后匹配另一个单词。搜索返回一个匹配组对象,您可以从中提取匹配的字符串。@steveha,我不这么认为。检查这句话的正则表达式你好,美丽的世界!。它将匹配Hello,and world!,i、 e.包括标点符号,以及@steveha,使用单词边界更合适,如我的回答:@polishchuk,这取决于他是否需要标点符号来界定单词。我同意知道其他选择是件好事。如果他正在分析某种数据文件,他可能需要上面的表达式,而不是知道标点符号的表达式。@steveha:这取决于第三个元素,其他元素都需要。这里甚至没有任何负数:对不起,但我个人对棘手的定义是:如果我看着它,对自己说什么!那到底在干什么?!?那就很棘手了。也许这意味着我需要花更多的时间切片;也许这对其他人来说是显而易见的-顺便说一下,我完全同意使用.split方法函数而不是正则表达式来分割字符串。虽然我很喜欢正则表达式,但最简单的方法是最好的。据我所知,这种模式只匹配一个单词。我不清楚如何用这个来回答他的问题。如果你把这个应用到字符串你好,美丽的世界!这将匹配Hello,我不知道如何编写一个模式,在不弄糟的情况下丢弃逗号和空格。要使用此模式,可能最好使用string.split method函数在空白处拆分字符串,然后使用此模式去除找到的第一个和第三个单词的标点。@steveha,我不知道python,但我认为它与.NET Regex.Matches函数类似,它将返回所有出现的单词,例如:Hello,Beauty and world。我通常不使用它,所以我忘记了它,但是有一个函数re.findall,它将查找字符串中所有出现的模式。我刚刚测试了一下,效果很好,谢谢你教我一些东西。以下是我测试的代码:re.findallr'\b\w+\b',你好,美丽的世界!我刚刚使用re.findall编辑了您的答案,以包含一个代码示例。
[word for word in sentence.split() if word != "and"]