Python正则表达式:跳过引号之间分隔符的问题
我不熟悉正则表达式,并试图以(和/或)作为分隔符进行拆分 我使用了以下提供的解决方案: 并将我的正则表达式修改为:Python正则表达式:跳过引号之间分隔符的问题,python,regex,string,split,Python,Regex,String,Split,我不熟悉正则表达式,并试图以(和/或)作为分隔符进行拆分 我使用了以下提供的解决方案: 并将我的正则表达式修改为: re.split(r'(\s+and\s+|\s+or\s+)(?=(?:[^"]*"[^"]*")*[^"]*$)', s) 除了以下输入之外,它对我的大多数用例都很有用: 'col1 == "val1" or col2 == \'val1 and " val2\'' 对于这种特殊情况,拆分失败,我尝试用不同的组合修改上述正则表达式,但没有成功。是否有人可以帮助修复此正则表达
re.split(r'(\s+and\s+|\s+or\s+)(?=(?:[^"]*"[^"]*")*[^"]*$)', s)
除了以下输入之外,它对我的大多数用例都很有用:
'col1 == "val1" or col2 == \'val1 and " val2\''
对于这种特殊情况,拆分失败,我尝试用不同的组合修改上述正则表达式,但没有成功。是否有人可以帮助修复此正则表达式。您可以使用基于以下内容的解决方案:
import regex
s = 'col1 == "val1" or col2 == \'val1 and " val2\''
res = regex.split(r'''(?V1)(?:"[^"]*"|'[^']*')\K|(\s+(?:and|or)\s+)''', s)
print([x for x in res if x])
# => ['col1 == "val1"', ' or ', 'col2 == \'val1 and " val2\'']
看
详细信息
-允许以零长度匹配进行拆分的标志(?V1)
-双引号或单引号之间的子字符串,使用(?:“[^”]*“[^']*”)\K
从匹配值中丢弃(因此,当此模式匹配时,匹配为空字符串)\K
-或|
-1+空格、(\s+(?:和|或)\s+
或和
和1+空格或
(?:“[^”]*“|”[^']*”)(*跳过)(*F)|(\s+和\s+\s+或\s+)
(请参阅)。在Python中,您只能执行上面我发布的操作。请告诉我它是否适用于youThanks Wiktor,非常感谢。我会尝试一下。另外,您的意思是,内置的re模块不可能做到这一点吗?我对如此复杂的表达式不太在行。您能推荐一些我可以学习regex的好材料吗?@HarshBafna我不知道了解你的regex知识水平:),因此我只能建议你在上所有课程,通读,(还有许多其他链接到伟大的在线资源),以及所谓的社区。同样,值得一看。