我正在try 使用正则表达式来解析To邮箱标题.如果没有<>个字符,那么我想要整个字符串,否则我想要<>对中的内容.

import re
re_destinatario = re.compile(r'^.*?<?(?P<to>.*)>?')
addresses = [
    'XKYDF/ABC (Caixa Corporativa)',
    'Fulano de Tal | Atlantica Beans <fulano.tal@atlanticabeans.com>'
]
for address in addresses:
    m = re_destinatario.search(address)
    print(m.groups())
    print(m.group('to'))

但正则表达式是错误的:

('XKYDF/ABC (Caixa Corporativa)',)
XKYDF/ABC (Caixa Corporativa)
('Fulano de Tal | Atlantica Beans <fulano.tal@atlanticabeans.com>',)
Fulano de Tal | Atlantica Beans <fulano.tal@atlanticabeans.com>

我遗漏了什么?

推荐答案

您可以使用此正则表达式:

<?(?P<to>[^<>]+)>?$

RegEx Demo

RegEx Demo:

  • <?:与可选<匹配
  • (?P<to>[^<>]+):命名捕获组to以匹配1+个非<>的字符
  • >?:与可选>匹配
  • $:结束

Code Demo

Code:

import re
re_destinatario = re.compile(r'<?(?P<to>[^<>]+)>?$')
addresses = [
    'XKYDF/ABC (Caixa Corporativa)',
    'Fulano de Tal | Atlantica Beans <fulano.tal@atlanticabeans.com>'
]
for address in addresses:
    m = re_destinatario.search(address)
    print(m.group('to'))

Output:

XKYDF/ABC (Caixa Corporativa)
fulano.tal@atlanticabeans.com

Python相关问答推荐

Tokenizer Docker:无法为Tokenizer构建轮子,这是安装pyproject.toml项目所需的

Pandas滚动分钟,来自其他列的相应值

如何在Python中使用io.BytesIO写入现有缓冲区?

将numpy数组存储在原始二进制文件中

根据条件将新值添加到下面的行或下面新创建的行中

根据不同列的值在收件箱中移动数据

如何使用pandasDataFrames和scipy高度优化相关性计算

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

可变参数数量的重载类型(args或kwargs)

_repr_html_实现自定义__getattr_时未显示

根据二元组列表在pandas中创建新列

如何过滤包含2个指定子字符串的收件箱列名?

Pandas:将多级列名改为一级

我对我应该做什么以及我如何做感到困惑'

在ubuntu上安装dlib时出错

dask无groupby(ddf. agg([min,max])?''''

下三角形掩码与seaborn clustermap bug

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

Odoo16:模板中使用的docs变量在哪里定义?

根据客户端是否正在传输响应来更改基于Flask的API的行为