我在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;我需要在{};。
之后存储相同的格式有什么方法可以解决这个问题吗?
答案 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}}