【问题标题】:Regex to ignore multilines in between strings and select specific lines正则表达式忽略字符串之间的多行并选择特定行
【发布时间】:2021-10-28 11:18:21
【问题描述】:

我有一个这样的示例,我只想从联系信息部分获取姓名、地址电话和电子邮件行

** 网站信息 **

名称:BBB

地址:EFG 街

国家:印度

** 联系方式 **

名称:ABC

公司:PQR

地址:EFG 街

国家:印度

电话:12345

电子邮件:llcd@gmail.com

职业:XYZ

我尝试使用 -->(?[\n\r]名称:\s ([^\n\r]*) 这仅适用于名称。任何人都可以在这里帮助我为剩余字段找到合适的正则表达式

【问题讨论】:

  • 能否请您使用反引号重新格式化问题?并请添加语言标签。你的正则表达式 does not do 你声称它做了什么。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: regex


【解决方案1】:

其中一种方法是使用python 为每个人获取dict 的结果。

data = """** Site Info **

Name: BBB

Address: EFG Street

Country: IN

** Contact Info **

Name: ABC

Company: PQR

Address: EFG Street

Country: IN

Phone: 12345

Email: llcd@gmail.com

Occupation: XYZ
"""
from collections import defaultdict
out = defaultdict(dict)
got_contact_info = False
name = None
for line in data.split('\n'):
    line = line.strip()
    if 'Contact Info' in line:
        got_contact_info = True
        continue
    if not got_contact_info:
        continue
    
    if 'Name' in line:
        name = line.split(':')[1]
    elif 'Address' in line:
        out[name]['Address']=line.split(':')[1].strip()
    elif 'Phone' in line:
        out[name]['Phone']=line.split(':')[1].strip()
    elif 'Email' in line:
        out[name]['Email']=line.split(':')[1].strip()
print (out)

输出:

defaultdict(<class 'dict'>, {' ABC': {'Address': 'EFG Street', 'Phone': '12345', 'Email': 'llcd@gmail.com'}})

【讨论】:

  • OP 不是用 Python 写的,你觉得为什么会有帮助?
  • 哦,看到它是因为我在 SO 上的过滤器包含 python、regex 过滤器,因此看到了这个问题。错过检查 OP 添加的标签
  • @BhagyeshDudhediya 非常感谢您的检查。实际上我正在尝试使用正则表达式来解决它并提取值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 2023-03-17
相关资源
最近更新 更多