我有一堆输入字符串,采用以下(简化)格式:
"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 .+")
如何实际获取捕获的名称?
答案 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)就是名字。