gpt4 book ai didi

Python 正则表达式 : Ignore Escaped Character

转载 作者:行者123 更新时间:2023-11-28 17:51:57 24 4
gpt4 key购买 nike

好的,我目前正在使用 Python 的正则表达式库将以下字符串拆分为多组以分号分隔的字段。

'key1:"这是一个测试短语"; key2:“这是另一个测试短语”; key3:“好的,这是一个陷阱\;但你应该明白它”;'

正则表达式:\s*([^;]+[^\\])\s*;

我目前正在使用上面的 pcre,它工作正常,直到我遇到一个转义分号包含在上面提到的 key3 短语中的情况。

如何修改此表达式以仅拆分非转义分号?

最佳答案

这个的基本版本是您要忽略任何以反斜杠开头的 ;,而不管其他任何内容。这相对简单:

\s*([^;]*[^;\\]);

如果您希望将输入中的转义 反斜杠视为文字,这将变得棘手。例如:

"You may want to split here\\;"
"But not here\;"

如果这是你想要考虑的事情,试试这个(已编辑):

\s*((?:[^;\\]|\\.)+);

为什么这么复杂?因为如果允许转义反斜杠,那么您必须考虑这样的事情:

"0 slashes; 2 slashes\\; 5 slashes\\\\\; 6 slashes\\\\\\;"

每对双反斜杠将被视为文字 \。这意味着 ; 只有在其前面有奇数 个反斜杠时才会被转义。所以上面的输入将像这样分组:

#1: '0 slashes'
#2: '2 slashes\'
#3: '5 slashes\\; 6 slashes\\\'

因此模式的不同部分:

\s*            #Whitespace
((?:
[^;\\] #One character that's not ; or \
| #Or...
\\. #A backslash followed by any character, even ; or another backslash
)+); #Repeated one or more times, followed by ;

在反斜杠后要求一个字符可确保第二个字符始终正确转义,即使它是另一个反斜杠。

关于Python 正则表达式 : Ignore Escaped Character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435368/

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