从正则表达式中提取文本?

时间:2013-10-22 04:55:30

标签: python regex

我正在尝试在正则表达式中获取某些匹配文本的结果,但它似乎不起作用。任何人都知道可能出现的问题?

import re
text = "I want to match anything in <angle brackets>"
match = re.search("\<(?P<brackets>[^\>]+)>", text)
if match:
    print (match.group('brackets'))

这没有打印,即找不到匹配。

2 个答案:

答案 0 :(得分:6)

这实际上是一个非常常见的错误 - 当您想使用re.match时,看起来您正在使用re.searchre.match仅匹配给定文本的开头,而re.search检查整个事物。

import re
text = "I want to match anything in <angle brackets>"
match = re.search("\<(?P<brackets>[^\>]+)>", text)
if match:
    print (match.group('brackets'))

输出:

'angle brackets'

答案 1 :(得分:2)

虽然@Tom Jacques已经很好地回答了这个问题,但当我尝试时,问题和答案中显示的代码对我来说都不起作用。以下代码有效:

import re
text = "I want to match anything in <angle brackets>"
match = re.search("\<(?P<brackets>.*)\>",text)
if match:
    print (match.group('brackets'))

请注意在正则表达式中将[^替换为.*),并在text的调用中包含re.search()参数。

(编辑)

这个答案解决了一个问题,该问题已在问题和其他答案中得到纠正。对此处提出的正则表达式的更改将捕获到该行的最后>的所有文本,而问题和其他答案中更改的正则表达式将仅捕获文本,直到第一个>它找到了。