首页 > 解决方案 > 尝试在 Python 中搜索带有 (.*?) 的字符串

问题描述

我是 Python 的 3 天新手,我正在尝试使用 findall() 在指定格式后搜索字符串字符

    >>> nameRegex = re.compile(r'First Name: (.*?) Last Name: (.*?)')
    >>> nameRegex.findall('This is my application for the job. First Name: 
       John Last Name: Johnson DOB 01/01/90')
    >>> [('John', '')]

我意识到我正在使用非贪婪?在组中,否则它也会返回字符串的 DOB 部分。

有没有一种方法可以格式化以获取 Johnson 字符串部分,仅此而已?

由于我很新,我不确定要移动到哪个方向来获得所需的字符串部分。

提前感谢任何人。

标签: pythonregexfindall

解决方案


这个问题已经回答了单字姓氏和名字,但如果事情变得奇怪,它们将不起作用。以下是您可以如何处理所有种类的名称(除了包含 的名字和包含 的" Last Name:"姓氏" DOB"):

nameRegex = re.compile(r'First Name: (.*?) Last Name: (.*?(?= DOB ))')
nameRegex.findall("This is my application for the job. First Name: Mary Beth Last Name: von Sternberg-O'Leary DOB 01/01/90")

这给出了正确的输出:

[('Mary Beth', "von Sternberg-O'Leary")]

正则表达式中看起来很有趣的部分(.*?(?= DOB )),被称为“积极的前瞻”。简而言之,这使得组匹配相同的字符串,但从捕获组中(.*? DOB )丢弃。" DOB "

这是lookarounds的介绍,一旦您熟悉了它们,它们就会非常有用。


推荐阅读