4

我试图在正则表达式中获取一些匹配文本的结果,但它似乎不起作用。有谁知道可能出了什么问题?

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

这不打印任何内容,即未找到匹配项。

4

2 回答 2

6

这实际上是一个非常常见的错误——re.match当你想使用re.search. re.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'
于 2013-10-22T04:57:29.827 回答
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'))

请注意正则表达式中的文本替换以及对[^的调用中包含的参数。.*)textre.search()

(编辑)

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

于 2013-10-22T05:10:21.873 回答