我希望在Python中匹配给定表达式之间的任何事物。例如:
dogdogacowadogdog <-- search a word between 'a' characters
<span>tiger<a> <-- search for sth between <span> and <a>
我希望只在某事之间匹配,因此它分别为cow
和tiger
。但是,使用rexexes时:
r'a(.*)a'
r'<span>(.*)<a>'
它打印了整行,而不仅仅是我要找的东西((.*)
匹配的是什么)。我该如何提取这些信息?
答案 0 :(得分:3)
您正在寻找的正则表达式是non-greedy匹配。
什么是非贪婪匹配?
.*
,.+
和.?
尝试匹配尽可能多的字符。在这些字符尝试匹配可能的最少字符后添加问号(?
)。 .*?
将匹配0个字符,如果可以,.+?
将匹配1。
回到你的问题,你应该使用它作为你的正则表达式查询:
r'a(.*?)a'
r'<span>(.*?)<a>'
接下来是匹配本身:
如果您使用match =
re.search()
,则需要获取match.group(1)
而不是match.group(0)
才能收到论坛。
match.group(0)
发出整场比赛(包括小组前后的部分)。
match.group(1)
只发出第一组。
match.groups()
但只会取出群组(而不是整个匹配),因此match.groups()[0]
将成为第一个群组。