gpt4 book ai didi

python - 解析单引号或双引号并允许使用正则表达式转义字符(在 Python 中)

转载 作者:太空狗 更新时间:2023-10-30 00:45:58 37 4
gpt4 key购买 nike

我的输入看起来像一个参数列表:

input1 = '''
title="My First Blog" author='John Doe'
'''

值可以用单引号或双引号括起来,但是也允许转义:

input2 = '''
title='John\'s First Blog' author="John Doe"
'''

有没有一种方法可以使用正则表达式来提取键值对,包括单引号或双引号以及转义引号?

使用 python,我可以使用以下正则表达式并处理非转义引号:

rex = r"(\w+)\=(?P<quote>['\"])(.*?)(?P=quote)"

那么返回是:

import re
re.findall(rex, input1)
[('title', '"', 'My First Blog'), ('author', "'", 'John Doe')]

import re
re.findall(rex, input2)
[('title', "'", 'John'), ('author', '"', 'John Doe')]

后者不正确。我不知道如何处理转义引号——假设在 (.*?) 部分。我一直在使用 Python regex to match text in single quotes, ignoring escaped quotes (and tabs/newlines) 上发布的答案中的解决方案无济于事。

从技术上讲,我不需要 findall 来返回引号字符——而只是键/值对——但这很容易处理。

任何帮助将不胜感激!谢谢!

最佳答案

编辑

我最初的正则表达式解决方案中有一个错误。该错误掩盖了您输入字符串中的错误:input2 不是您认为的那样:

>>> input2 = '''
... title='John\'s First Blog' author="John Doe"
... '''
>>> input2 # See - the apostrophe is not correctly escaped!
'\ntitle=\'John\'s First Blog\' author="John Doe"\n'

您需要将 input2 设为原始字符串(或使用双反斜杠):

>>> input2 = r'''
... title='John\'s First Blog' author="John Doe"
... '''
>>> input2
'\ntitle=\'John\\\'s First Blog\' author="John Doe"\n'

现在您可以使用正则表达式来正确处理转义引号:

>>> rex = re.compile(
r"""(\w+)# Match an identifier (group 1)
= # Match =
(['"]) # Match an opening quote (group 2)
( # Match and capture into group 3:
(?: # the following regex:
\\. # Either an escaped character
| # or
(?!\2) # (as long as we're not right at the matching quote)
. # any other character.
)* # Repeat as needed
) # End of capturing group
\2 # Match the corresponding closing quote.""",
re.DOTALL | re.VERBOSE)
>>> rex.findall(input2)
[('title', "'", "John\\'s First Blog"), ('author', '"', 'John Doe')]

关于python - 解析单引号或双引号并允许使用正则表达式转义字符(在 Python 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240119/

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