python:regexp:匹配和替换

python:regexp:匹配和替换,python,regex,string,Python,Regex,String,我正在使用regexps在python中开发一种“自定义脚本解析器”。 请不要回答regexp是否是不适合这种操作的好解决方案。。。即使我知道使用regexp进行解析的问题,解释为什么选择使用regexp也是一件很长的事情(而且是离题的) 现在我开始提问。我们从这个场景开始: 这是我将从文件中读取的行,我需要用我的regexp解析该行: something = { call _ "string to ""capture"" " } #non consumed 现在我可以这样做: import

我正在使用regexps在python中开发一种“自定义脚本解析器”。 请不要回答regexp是否是不适合这种操作的好解决方案。。。即使我知道使用regexp进行解析的问题,解释为什么选择使用regexp也是一件很长的事情(而且是离题的)

现在我开始提问。我们从这个场景开始:

这是我将从文件中读取的行,我需要用我的regexp解析该行:

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。