首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python re.findall与re.sub

python re.findall与re.sub
EN

Stack Overflow用户
提问于 2016-04-05 15:05:49
回答 1查看 646关注 0票数 2

请解释我为什么使用re.find和re.sub得到不同的结果

我解析的字符串:

代码语言:javascript
复制
GRANT USAGE ON *.* TO 'testuser'@'10.10.10.10' IDENTIFIED BY PASSWORD '*A78AF560CD6F8FEA4DC8205299927B6CB1B1F56A'

代码:

代码语言:javascript
复制
import re

S="GRANT USAGE ON *.* TO 'testuser'@'10.10.10.10' IDENTIFIED BY PASSWORD '*A78AF560CD6F8FEA4DC8205299927B6CB1B1F56A'"

U=re.compile(r'.* TO \'(.*?)\'@.*')
H=re.compile(r'.*\'@\'(.*?)\'.*')

print(U.findall(S))
print(H.findall(S))

所以我得到了我想要的:

代码语言:javascript
复制
['testuser']  
['10.10.10.10']

因此,我想改变ip地址和用户,所以我尝试使用re.sub。

代码

代码语言:javascript
复制
import re
S="GRANT USAGE ON *.* TO 'testuser'@'10.10.10.10' IDENTIFIED BY PASSWORD '*A78AF560CD6F8FEA4DC8205299927B6CB1B1F56A'"

U=re.compile(r'.* TO \'(.*?)\'@.*')
H=re.compile(r'.*\'@\'(.*?)\'.*')

HOST=H.sub('another_ip',S) 
USER=U.sub('another_user',S)
print(HOST)
print(USER)

但我只知道这个:

代码语言:javascript
复制
another_ip
another_user
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-05 15:13:09

使用re.sub(),您需要明确指定要替换的字符串的哪一部分。换句话说,re.sub()将替换由正则表达式(好,严格地说the leftmost non-overlapping occurrence of a pattern)匹配的所有内容--在您的示例中,您将替换完整的字符串。相反,您可以具体匹配用户和IP地址,例如:

代码语言:javascript
复制
>>> re.sub(r"'(\w+)'@'(\d+\.\d+\.\d+\.\d+)'", "'another_user'@'another_ip'", S)
"GRANT USAGE ON *.* TO 'another_user'@'another_ip' IDENTIFIED BY PASSWORD '*A78AF560CD6F8FEA4DC8205299927B6CB1B1F56A'"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36430170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档