Regex-Python:在特定单词后捕获三(3)个单词

Regex-Python:在特定单词后捕获三(3)个单词,python,regex,Python,Regex,大家好,我有以下代码: str1 = "Hello, I would like to meet you at the train station of Berlin after 6 o' clock" match = re.compile(r' at \w+ \w+ \w+') match.findall(str1) 例如,有没有比“\w+\w+\w”更好的方法来捕获特定数量的单词?是的。要指定匹配的特定计数,请使用大括号。例如: match = re.compile(r'at ((\w+

大家好,我有以下代码:

str1 =  "Hello, I would like to meet you at the train station of Berlin after 6 o' clock"
match = re.compile(r' at \w+ \w+ \w+')
match.findall(str1)

例如,有没有比“\w+\w+\w”更好的方法来捕获特定数量的单词?

是的。要指定匹配的特定计数,请使用大括号。例如:

match = re.compile(r'at ((\w+ ){3})')
其中:

>>> print match.findall(str1)
[('the train station ', 'station ')]
一般来说,为了只捕获
word
之后的
n
单词,您的正则表达式应该是:

'word\s+((?:\w+(?:\s+|$)){n})'
其中,
?:
表示“非捕获”组,
\s
表示空白,
表示“或”,而
$
表示“字符串结束”。因此:

>>> print re.compile(r'at\s+((?:\w+(?:\s+|$)){3})').findall(str1)
['the train station ']

为什么不干脆
str.将
拆分成单词,然后从你要查找的单词的索引中切片?为什么要使用正则表达式呢?是的,这确实是一种方法,但我需要正则表达式解决方案。不过非常感谢你的建议!你给出的答案是regex one.你还想要什么?不管怎样,有一个X先生发布了这个match=re.compile(r'(在(?:(?:\w+(?:\s+|$){5})),这正是我想要的是,有更好的方法。使用
nltk
及其标记器制作一个单词列表,然后在
中找到
,并将下面的列表切分。很好!甚至比:match=re.compile(r)(在(?:(?:\w+(?:\s+|$){5})更好)非常感谢@D1W1TR15实际上,您刚才引用的解决方案至少包含一个重要的改进:组
(?:\s+|$)
。这使得匹配即使在字符串的末尾也能起作用,
\s+
将不匹配,因为它意味着“一个或多个空白字符”。我将把它包括在我的答案中。谢谢你的解释,尽管我在做实验。Regex又迈出了一大步!:)