regex在Python中找不到

2024-09-29 23:22:08 发布

您现在位置:Python中文网/ 问答频道 /正文

使用给定字符串: 姓,MM,名,JTA19 R<;第一。第二@域.com>

我可以用这个匹配所有组:

([A-Za-z]+),([A-Z]+),([A-Za-z]+),([A-Z0-9]+)\s([A-Z])\s<([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})

然而,当我将它应用到Python时,它总是找不到它

regex=re.compile(r"(?P<lastname>[A-Za-z]+),"
                 r"(?P<initials>[A-Z]+)"
                 r",(?P<firstname>[A-Za-z]+),"
                 r"(?P<ouc1>[A-Z0-9]+)\s"
                 r"(?P<ouc2>[A-Z])\s<"
                 r"(?P<email>[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})"                       
                 )

我想我已经把范围缩小到电子邮件的这一部分:

[A-Z0-9._%+-]

怎么了?你知道吗


Tags: 字符串ltgtrecomfirstnameregexmm
2条回答

替换

r"(?P<email>[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})"

r"(?P<email>[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})"

也允许小写字母。你知道吗

如果要向compile方法传递多个字符串,则需要传递一个完整的正则表达式。你知道吗

exp = '''
         (?P<lastname>[A-Za-z]+),
         (?P<initials>[A-Z]+),
         (?P<firstname>[A-Za-Z]+),
         (?P<ouc1>[A-Z0-9]+)\s
         (?P<ouc2>[A-Z])\s<
         (?P<email>[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})'''

regex = re.compile(exp, re.VERBOSE)

虽然我不得不说,您的字符串只是逗号分隔的,所以这可能会更容易一些:

>>> s = "Surname,MM,Forename,JTA19 R <first.second@domain.com>"
>>> lastname,initials,firstname,rest = s.split(',')
>>> ouc1,ouc2,email = rest.split(' ')
>>> lastname,initials,firstname,ouc1,ouc2,email[1:-1]
('Surname', 'MM', 'Forename', 'JTA19', 'R', 'first.second@domain.com')

相关问题 更多 >

    热门问题