在没有环境的情况下拉正则表达式匹配

时间:2016-03-25 12:48:16

标签: python regex

我希望在Python中匹配给定表达式之间的任何事物。例如:

dogdogacowadogdog  <-- search a word between 'a' characters
<span>tiger<a>      <-- search for sth between <span> and <a>

我希望只在某事之间匹配,因此它分别为cowtiger。但是,使用rexexes时:

r'a(.*)a'
r'<span>(.*)<a>'

它打印了整行,而不仅仅是我要找的东西((.*)匹配的是什么)。我该如何提取这些信息?

1 个答案:

答案 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]将成为第一个群组。