gpt4 book ai didi

Python 正则表达式跳过可选组

转载 作者:行者123 更新时间:2023-11-28 17:33:53 26 4
gpt4 key购买 nike

我正在尝试从字符串中提取医生的姓名和职称。如果字符串中有“dr”,我希望它使用它作为标题,然后使用下一个词作为医生的名字。但是,我还希望正则表达式与其中没有“dr”的字符串兼容。在这种情况下,它应该只匹配第一个单词作为医生的名字,而不假定任何标题。

我想出了以下正则表达式模式:

pattern = re.compile('(DR\.? )?([A-Z]*)', re.IGNORECASE)

据我了解,这应该可以选择匹配字母“dr”(带或不带句点),然后是一个空格,后跟一系列字母,不区分大小写。问题是,如果它位于字符串的开头,它似乎只会选择可选的“dr”标题。

import re
pattern = re.compile('(DR\.? )?([A-Z]*)', re.IGNORECASE)
test1 = "Dr Joseph Fox"
test2 = "Joseph Fox"
test3 = "Optometry by Dr Joseph Fox"
print pattern.search(test1).groups()
print pattern.search(test2).groups()
print pattern.search(test3).groups()

代码返回:

('Dr ', 'Joseph')
(None, 'Joseph')
(None, 'Optometry')

前两个场景对我来说很有意义,但为什么第三个场景找不到可选的“博士”?有什么办法可以做到这一点吗?

最佳答案

您会看到这种行为,因为正则表达式倾向于贪婪并接受第一个可能的匹配项。因此,您的正则表达式只接受第三个字符串的第一个单词,没有匹配第一组的字符,这是可选的。您可以使用 findall 正则表达式函数来查看:

>>> print pattern.findall(test3)
[('', 'Optometry'), ('', ''), ('', 'by'), ('', ''), ('Dr ', 'Joseph'), ('', ''), ('', 'Fox'), ('', '')]

很明显,“Dr Joseph”已成功找到,但不是字符串的第一个匹配部分。

根据我的经验,试图强制正则表达式表达/捕获多个案例通常需要难以理解的正则表达式。具体回答你的问题,我更愿意通过一个需要“博士”标题的正则表达式来运行字符串,如果我没有得到任何匹配项,只需按空格分开并取第一个词(或者你想去获取第一个词)。

关于Python 正则表达式跳过可选组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32341355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com