我正在尝试编写一个只匹配字符串中第一个和第三个单词的正则表达式:
term1 and term2
我的第一次尝试是[^(\s|(and))]+
,但由于
term1 anbd term2
给了我这3场比赛:['term1','b','term2']
而我希望它返回['term1','anbd','term2']
答案 0 :(得分:5)
仅匹配第一个和第三个字:(\S+)\s+\S+\s+(\S+)
编辑:如果你的意思是'匹配除了单词“和”之外的所有单词,那么:\b(?!and\b)\S+\b
答案 1 :(得分:3)
而不是正则表达式,请考虑
sentence.split()[:3:2]
例如
>>> "term1 and term2".split()[:3:2]
['term1', 'term2']
>>> "term1 anbd term2".split()[:3:2]
['term1', 'term2']
>>>
答案 2 :(得分:1)
你可以使用这个正则表达式\b\w+\b
将你的句子分成单词,然后取第1和第3个。
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"]
答案 3 :(得分:0)
我刚试过这个,它有效:)
\b([^a].*?\b|a[^n].*?\b|an[^d].*?\b)
答案 4 :(得分:0)
[]
围绕字符类 - 一组要匹配或不匹配的字符。你的正则表达式是“一个或多个字符,其中没有一个是,
a
,n
或d
”,这就是你得到结果的原因。
正确回答这些问题需要正确的问题。在您的情况下,“和”这个词有什么特别之处?你想要“每个不是and
的单词”,或者你想要“字符串的第一个和第三个单词,无论单词是什么”,还是只需 ?< / p>
您在第二种情况下对所需输出的描述听起来像是您想要“每个不是and
的单词”。有更简单的方法来实现这一目标。正则表达并不像人们想要的那样有用。
split
字符串方法将其剪切为单词。从那里,我们可以使用列表推导来过滤掉任何“和”的单词。它看起来像:
[word for word in sentence.split() if word != "and"]
请参阅?它实际上是简单的英语。