在正则表达式中查找匹配的文本

时间:2013-10-22 20:58:21

标签: python regex

我有一堆输入字符串,采用以下(简化)格式:

"Hello my name is Dan"
"Hey my name is Tony"
"Hey|Hello|Hi my name is _"

我正在尝试编写一个正则表达式来从前面的示例中提取名称,但我仍然坚持如何去做。

我目前有

import re
r = re.search("(Hello|Hey|Hi) my name is .+")

如何实际获取捕获的名称?

4 个答案:

答案 0 :(得分:2)

你实际上并不太远。你错过了正则表达式提供的文本,但我猜你真的想编译一个以后再使用

import re
r = re.compile("(Hello|Hey|Hi) my name is (.+)")

......稍后

match = r.search(text)
if match:
    name = match.groups()[1]

这里发生的事情是被parens包围的所有东西都被视为被捕获的群体。如果匹配,您可以稍后参考。您还可以使用(?P<name>PATTERN)

命名匹配

答案 1 :(得分:1)

试试这个:

import re
r = re.search("(?:Hello|Hey|Hi) my name is (\w+)", "Hello my name is Tony")
print r.groups()[0]

打印Tony

答案 2 :(得分:1)

您可以使用(\w+)匹配分组。

但是如果“我的名字是”预计会在你的字符串中,为什么不使用类似的东西 r.split('my name is ', 1)[1].split(' ', 1)[0]

答案 3 :(得分:1)

使用群组检索正则表达式匹配的部分内容。以下是codelet的改进变体:

import re
str = "Hello my name is Dan"
r = re.search("(Hello|Hey|Hi) my name is (.+)", str)
name = r.group(2)

我在(。+)周围添加了括号,以便搜索对象可以引用它们。 group(0)是完整匹配的字符串。 group(1)是第一组 - Hello,Hey或Hi。 group(2)就是名字。