我正在解析一个查询,其中'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?提前谢谢
您正在寻找一种捕获机制,它允许您使用反向引用还原匹配和替换的零件。你知道吗
这是一个有效的正则表达式:
替换是
\1 AND \2
,其中\1
指向用([a-z])
捕获的子串,\2
引用用([(a-z])
捕获的子文本。你知道吗见regex demo
Python code:
如果您想避免反向引用,另一种尝试可能是使用double
re.sub
。其中第一个re.sub
用AND
替换所有空格,第二个re.sub
用OR
替换\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
。你知道吗工作示例如下-
相关问题 更多 >
编程相关推荐