我正在尝试在字符串末尾替换LIMIT X
。这是我现在所拥有的:
>>> re.sub(r'limit\s{1,}(\d{1,})\s+?$', '20', 'select * from entity limit 1000\r\n', flags=re.IGNORECASE)
'select * from entity limit 1000'
但是,似乎我没有获得正确的正则表达式。什么是正确的正则表达式?请注意,通过执行str.split('limit')
并从那里开始,可以更轻松地完成此操作,但是对于这个问题,我需要使用正则表达式。
答案 0 :(得分:1)
>>> re.sub(r'(\s+limit)\s+(\d+)\s+?$', r"\1 20" , 'select * from entity limit 1000\r\n', flags=re.IGNORECASE)
'select * from entity limit 20\n'
经过2.7.13和3.7.2的测试。
\1
是要匹配的" limit"
部分,r
前的"\1 20"
很重要。
如果仍有问题,请发表评论。
(并且请说明您的系统和python版本等)
答案 1 :(得分:0)
寻求帮助时,请务必记住要provide details和minimal example清楚地说明您要做什么。
我假设您有一组查询,并且您想删除限制以使查询返回完整结果,并且您想在末尾保留空白(这对于执行查询可能很重要)
我已经在python 2.7.15rc1
和3.6.6
中测试过的工作示例:
import re
query = 'select * from entity limit 1000\r\n'
regex = r'\s+limit\s+\d+(\s*)$'
replacement = '\\1'
re.sub(regex, replacement, query, flags=re.IGNORECASE)
您的正则表达式中的错误是,您在另一个量词(?
之后有一个可选的量词(+
),但是一个量词之前必须有一个原子。
您也可以将不需要的量词{1,}
替换为等效形式+
。
在示例\\1
中使用的替换项是在正则表达式上捕获的组(括号之间的组)。
在说明之前,我还添加了一个强制性的空格分隔符,以使结果看起来更优美。
您可以了解正则表达式for python3和python2(第7章)。