如何用2组替换正则表达式

时间:2014-04-11 20:39:40

标签: regex python-3.x regex-group

我在REGEX中遇到问题。 我的代码是:

 self.file = re.sub(r'([^;{}]{1}\s*)[\n]|([;{}]\s*[\n])',r'\1\2',self.file)

我需要替换它:

TJumpMatchArray *skipTableMatch         
);        
void computeCharJumps(string *str

用这个:

TJumpMatchArray *skipTableMatch     );
void computeCharJumps(string *str

我需要存储空格,我需要更换所有新行' \ n'那不是{};与'' 。

我发现问题可能是python解释(使用Python 3.2.3)没有工作parallen,如果它不匹配第一组如果失败了:

File "cha.py", line 142, in <module>
maker.editFileContent()
File "cha.py", line 129, in editFileContent
self.file = re.sub(r'([^;{}]{1}\s*)[\n]|([;{}]\s*[\n])',r'\1|\2',self.file)
File "/usr/local/lib/python3.2/re.py", line 167, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/usr/local/lib/python3.2/re.py", line 286, in filter
return sre_parse.expand_template(template, match)
File "/usr/local/lib/python3.2/sre_parse.py", line 813, in expand_template
raise error("unmatched group")

在这个在线正则表达式工具中,它正在运行:Example here

我使用的原因:

|([;{}]\s*[\n])

是因为如果我有:

';        \n'

它取代了:

'        \n'

&#39;&#39;我需要在{};。

之后存储相同的格式

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

问题在于,对于每个找到的匹配,只有一个组不会为空。

考虑这个简化的例子:

>>> import re
>>> 
>>> def replace(match):
...     print(match.groups())
...     return "X"
... 
>>> re.sub("(a)|(b)", replace, "-ab-")
('a', None)
(None, 'b')
'-XX-'

如您所见,替换函数被调用两次,第二组被设置为None,第一组被设置为re.sub(r'([^;{}]{1}\s*)[\n]|([;{}]\s*[\n])', lambda m: m.group(1) or m.group(2), self.file)

如果您使用函数替换匹配项(如我的示例中所示),您可以轻松检查哪些组是匹配的组。

示例:

{{1}}