gpt4 book ai didi

python - 如何使用正则表达式从多行字符串中获取groupdict

转载 作者:太空宇宙 更新时间:2023-11-03 21:39:10 25 4
gpt4 key购买 nike

我尝试使用正则表达式从多行字符串获取字典,但我在正确分隔行方面遇到问题。

这是我尝试过的...

import re

text = '''\n\n\nName: Clash1\nDistance: -1.274m\nImage Location: navis_raport_txt_files\\cd000001.jpg\nHardStatus: New\nClash Point: 1585.236m, 193.413m'''
clash_data = re.compile('''
(?P<clash_number>Clash\d+)\n
(?P<clash_depth>\d.\d{3})\n
(?P<image_location>cd\d+.jpg)\n
(?P<clash_status>\w{2:})\n
(?P<clash_point>.*)\n
(?P<clash_grid>\w+-\d+)\n
(?P<clash_date>.*)''', re.I | re.VERBOSE)
print(clash_data.search(text).groupdict())

这个类似的例子效果很好:

import re

MHP = ['''MHP-PW-K_SZ-117-R01-UZ-01 - drawing title 123''',
'MHP-PW-K_SZ-127-R01WIP - drawing title 2',
'MHP-PW-K_SZ-107-R03-UZ-1 - drawing title 3']

fields_from_name = re.compile('''
(?P<object>\w{3})[-_]
(?P<phase>\w{2})[-_]
(?P<field>\w)[-_]
(?P<type>\w{2})[-_]
(?P<dr_number>\d{3})[-_]
[-_]?
(?P<revision>\w\d{2})?
(?P<wip_status>WIP)?
[-_]?
(?P<suplement>UZ-\d+)?
[\s-]+
(?P<drawing_title>.*)
''', re.IGNORECASE | re.VERBOSE)
for name in MHP:
print(fields_from_name.search(name).groupdict())

为什么我的尝试不像示例那样有效?

最佳答案

它不起作用只是因为 Pattern.search()没有找到匹配项。根据您正在模仿的工作示例,您还需要匹配输出字典中所需的命名捕获组之间的字符(以便整个模式返回匹配项)。

以下是使用 .*\n.* 的示例作为一种蛮力方法来弥合捕获组之间的差距,方法是匹配最后一个捕获组之后的任何非换行符,然后匹配换行符,然后匹配下一个捕获组之前的任何非换行符(您可能会想要比这更精确,但它说明了问题)。我只包含了您的前 3 组,因为我没有遵循您的 <clash_status> 中的正则表达式的意图组。

import re

text = '\n\n\nName: Clash1\nDistance: -1.274m\nImage Location: navis_raport_txt_files\\cd000001.jpg\nHardStatus: New\nClash Point: 1585.236m, 193.413m'

clash_data = re.compile(r'(?P<clash_number>Clash\d+).*\n.*'
r'(?P<clash_depth>\d.\d{3}).*\n.*'
r'(?P<image_location>cd\d+.jpg)', re.I | re.VERBOSE)

result = clash_data.search(text).groupdict()

print(result)
# OUTPUT
# {'clash_number': 'Clash1', 'clash_depth': '1.274', 'image_location': 'cd000001.jpg'}

关于python - 如何使用正则表达式从多行字符串中获取groupdict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53013410/

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