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

4
我正在尝试从正则表达式中获取一些匹配文本的结果,但似乎无法正常工作。有人知道可能出了什么问题吗?
import re
text = "I want to match anything in <angle brackets>"
match = re.search("\<(?P<brackets>[^\>]+)>", text)
if match:
    print (match.group('brackets'))

这将不会输出任何内容,即没有找到匹配项。

2个回答

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'

啊,这就解决了问题,我应该更仔细地阅读它,谢谢! - user2905592

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'))

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

(编辑)

此答案解决了已在问题和其他答案中进行更正的问题。在此处提出的正则表达式更改将捕获直到行末的所有文本,而问题和其他答案中所更改的正则表达式仅会捕获找到的第一个>之前的文本。


你说得对,我实际上在问题的格式上搞砸了。 - user2905592

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接