Python回复sub查询解析

2024-09-29 19:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在解析一个查询,其中'AND'运算符是隐式的(我的意思是当两个单词或两个括号或一个单词和一个括号之间有空格时,我应该在那里放置'AND'。当我得到“)(”时,很容易匹配和替换,但是当我面对“wordexample(”或“wordexample1 wordexample2”时遇到了一个问题。考虑到'OR'运算符不是隐式的,所以我只需要解析小写字母单词。你知道吗

举个例子:

a='abc def (ghi) OR jkl'

应该像:amodif='abc AND def AND (ghi) OR jkl'

我试过使用re-library:

print re.sub('[a-z] \\(', '[a-z] AND \\(',a)

但是它用[a-z]改变了单词的最后一个字母。有没有保留匹配表达式的一部分(在本例中是单词的最后一个字母)和re?提前谢谢


Tags: orandredef字母运算符jkl单词
2条回答

您正在寻找一种捕获机制,它允许您使用反向引用还原匹配和替换的零件。你知道吗

这是一个有效的正则表达式:

([a-z]) ([(a-z])

替换是\1 AND \2,其中\1指向用([a-z])捕获的子串,\2引用用([(a-z])捕获的子文本。你知道吗

regex demo

Python code

import re
p = re.compile(r'([a-z]) ([(a-z])')
test_str = "abc def (ghi) OR jkl"
subst = r"\1 AND \2"
result = re.sub(p, subst, test_str)
print(result) # => abc AND def AND (ghi) OR jkl

如果您想避免反向引用,另一种尝试可能是使用doublere.sub。其中第一个re.subAND替换所有空格,第二个re.subOR替换\s+AND OR AND\s+以进行更正。你知道吗

因此re.sub(r'(\s+)',r' AND ',s)返回'abc AND def AND (ghi) AND OR AND jkl're.sub(r'\s+AND OR AND\s+',' OR ',re.sub(r'(\s+)',r' AND ',s))将其更正为abc AND def AND (ghi) OR jkl。你知道吗

工作示例如下-

>>>s='abc def (ghi) OR jkl'
>>>re.sub(r'\s+AND OR AND\s+',' OR ',re.sub(r'(\s+)',r' AND ',s))
>>>'abc AND def AND (ghi) OR jkl'

相关问题 更多 >

    热门问题