使用Python中的正则表达式替换基于上一个文本行中的模式的文本行
要求:根据前一行中的文本,即“GVH:”将出现的“url:”文本行替换为新文本[例如:url:] 示例: 考虑下面的文本行:使用Python中的正则表达式替换基于上一个文本行中的模式的文本行,python,regex,Python,Regex,要求:根据前一行中的文本,即“GVH:”将出现的“url:”文本行替换为新文本[例如:url:] 示例: 考虑下面的文本行: GVH: 网址:http://some.web.com/GVH-JBoss.ear sha1:7b7b797735822d411c288d14510e9e023001d3ae 视频: 网址:http://some.web.com/VID.ear sha1:2FCAC8BDCFC12F0A7DFEF0BAD01DB5F8A8 期望值: GVH: 网址:ftp://ne
GVH:
网址:http://some.web.com/GVH-JBoss.ear
sha1:7b7b797735822d411c288d14510e9e023001d3ae
视频:
网址:http://some.web.com/VID.ear
sha1:2FCAC8BDCFC12F0A7DFEF0BAD01DB5F8A8
期望值:
GVH:
网址:ftp://new.web.com/new.ear
sha1:7b7b797735822d411c288d14510e9e023001d3ae
视频:
网址:http://some.web.com/VID.ear
sha1:2FCAC8BDCFC12F0A7DFEF0BAD01DB5F8A8
我尝试使用python正则表达式[re.sub()方法]来实现这一点:
re.sub(r'\s+GVH:[\s]*\s+url:\s\w+.*ear',url:ftp://new.web.com/new.ear,line.rstrip(),re.MULTILINE)
其他正则表达式试图匹配此指定模式:
1.\s+GVH:[\s]*\s+url:\s\w+.*ear
2.(\s+GVH:\n)?\s*url:\s+\w+.*ear$
3.(\s+GVH:\n)?\s*url:\s+\w+.*ear$
4.[(您可以使用yaml
模块
Ex:
import yaml
with open(filename) as f:
data = yaml.load(f) #Read yml file
newVal = "ftp://new.web.com/new.ear"
data["GVH"]["url"] = newVal #Update Value
with open(filename, 'w') as outfile:
yaml.dump(data, outfile, default_flow_style=False) #Write Back
这是一个yaml
文件吗?您正在使用大量不必要的方括号,这使正则表达式变得比需要的更复杂。请使用[
]
将一组字符括起来,例如[a-z]
或[\w\s]
。另外\w
仅包括字母数字字符和\uu
,因此它不会捕获URL中的://
。是的,输入文件是一个YAMLYes,这在没有正则表达式的情况下起作用。但要求是使用正则表达式替换文件内容。在使用PyYAML python YAML框架的情况下工作。但这需要用户在运行此codePerfect!之前在其计算机中显式安装PyYAML!(GVH:\s+url:\s+。*?ear
此正则表达式符合我的要求。谢谢@Sunitha。
import yaml
with open(filename) as f:
data = yaml.load(f) #Read yml file
newVal = "ftp://new.web.com/new.ear"
data["GVH"]["url"] = newVal #Update Value
with open(filename, 'w') as outfile:
yaml.dump(data, outfile, default_flow_style=False) #Write Back