首页 > 解决方案 > 如何用正则表达式解决这个 python 问题?

问题描述

考虑下面的 Python 程序。

import re
  words = input("Say something!\n")
  p = re.compile("my name is (.*)", re.IGNORECASE)
  matches = p.search(words)
  if matches:
    print(f"Hey, {matches[1]}.")
  else:
    print("Hey, you.")

给定像 My name is Earl 这样的输入,这个程序礼貌地输出 Hey, Earl。但是,给定像 My name is Earl Hickey 这样的输入,这个程序输出 Hey, Earl Hickey,感觉有点正式。建议如何修改 re.compile 的参数,使该程序在这两种情况下都会输出 Hey, Earl。

标签: pythonregex

解决方案


您可以使用r"my name is (\w+)". \w+将捕获组限制为一系列单词字符,因此我们将假设直到单词末尾的所有内容都是名字。

import re

words = input("Say something!\n")
matches = re.search(r"my name is (\w+)", words, re.I)

if matches:
    print(f"Hey, {matches[1]}.")
else:
    print("Hey, you.")

推荐阅读