python:regexp:匹配和替换
我正在使用regexps在python中开发一种“自定义脚本解析器”。 请不要回答regexp是否是不适合这种操作的好解决方案。。。即使我知道使用regexp进行解析的问题,解释为什么选择使用regexp也是一件很长的事情(而且是离题的) 现在我开始提问。我们从这个场景开始: 这是我将从文件中读取的行,我需要用我的regexp解析该行:python:regexp:匹配和替换,python,regex,string,Python,Regex,String,我正在使用regexps在python中开发一种“自定义脚本解析器”。 请不要回答regexp是否是不适合这种操作的好解决方案。。。即使我知道使用regexp进行解析的问题,解释为什么选择使用regexp也是一件很长的事情(而且是离题的) 现在我开始提问。我们从这个场景开始: 这是我将从文件中读取的行,我需要用我的regexp解析该行: something = { call _ "string to ""capture"" " } #non consumed 现在我可以这样做: import
something = { call _ "string to ""capture"" " } #non consumed
现在我可以这样做:
import re
regex1 = re.compile(r'^([^"]*?)(_?)\s*"((?:""|[^"])*)"')
mystr = r'something = { call _ "string to ""capture"" " } #non consumed'
mymatch = re.search(regex1, mystr)
因此,我可以获得这些捕获组:
- 0:所有mystr行,直到最后一个报价
- 1:报价前的所有事项(我需要这项匹配,以验证稍后的事项)
- 2:“\”或“”(取决于引号前是否有下划线[下划线和引号之间可以有空格])
- 3:引号(其中“”被视为字符,而不是结束引号)
re.search
可以(因为我可以使用mymatch.group(n)
检查单个捕获组的值)
但是。。。在我使用了从1
到3
的所有组之后,我需要减少mystr,以便它只包含“successfull”regexp未使用的字符串”
我可以这样做:
mystr = mystr[ len(mymatch.group(0)): ]
因此,工作代码可以是这样的:
import re
regex1 = re.compile(r'^([^"]*?)(_?)\s*"((?:""|[^"])*)"')
mystr = r'something = { call _ "string to ""capture"" " } #non consumed'
mymatch = re.search(regex1, mystr)
# code here that uses mymatch.group(n)
mystr = mystr[ len(mymatch.group(0)): ] # clear from mystr what was parsed by the regexp
但我想看看是否还有其他方法可以做到这一点。
您能推荐与我提供的不同的其他代码方法吗?”
搜索: 当前位置它只询问替换,而不询问单个比赛组。在这里,我询问如何以良好的方式同时执行这两个操作
:由于(几乎)与第一个链接相同的原因,good是一个相对的术语,包含了很多东西-我认为这个问题应该在我不知道代码审查的时候提出。但是我用“你能建议与我提供的代码方法不同的其他代码方法吗?“希望它不像以前那么模棱两可。正如你所指出的,我可能会将这个问题转移到codereview。谢谢你的帮助。如果问这个问题的地方正确(我认为Sislam可能是正确的),我可以请管理员把这个问题从这里转移到codereview吗?(以这种方式,我将避免在stackexcerge网站上发布两次相同的主题)在IMO的代码审查主题上有太多的示例。我们要求的是真正的代码,而不是MVCEs。好是一个相对的术语,包含很多东西-我想这个问题应该在我不知道代码审查的时候提出。然而,我把我的问题编辑成了“你能推荐与我提供的不同的其他代码方法吗?”希望它比以前少一些模棱两可的地方。正如你所指出的,我可能会将这个问题转移到codereview。谢谢你的帮助。如果问这个问题的地方正确(我认为Sislam可能是正确的),我可以请管理员把这个问题从这里转移到codereview吗?(通过这种方式,我将避免在stackexcerge网站上发布两次相同的主题)IMO的代码审查主题中有太多的示例。我们要求的是真正的代码,而不是MVCE。