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又迈出了一大步!:)