我写了一个python正则表达式。
import re
nt = re.sub('NT:\s*[^,)]*',r'\1', message)
消息包含数据。 (NT:167 ms,ST:2509 ms,XT:1325 ms)
如果我在数据上运行正则表达式以提取167 ms
,我会收到以下错误。
File "test.py", line 79, in <module>
nt = re.sub('NT:\s*[^,)]*',r'\1', message)
File "/usr/lib64/python2.7/re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/usr/lib64/python2.7/re.py", line 275, in filter
return sre_parse.expand_template(template, match)
File "/usr/lib64/python2.7/sre_parse.py", line 802, in expand_template
raise error, "invalid group reference"
sre_constants.error: invalid group reference
我的代码出了什么问题?
答案 0 :(得分:1)
\1 matches the same text as most recently matched by the 1st capturing group
import re
nt = re.sub('\(NT:\s*([^,)]*),.*$',r'\1', message)
^^ ^^
试试这个。你还没有capturing group
referencing
\1
这就是group ()
。这就是为什么错误。在{{1}中输出你想要的那个}然后backreference it
。见演示。
https://regex101.com/r/sJ9gM7/21#python
如果您希望nt
为167 ms
,则必须匹配整个字符串然后替换。否则您可以使用
nt=re.findall(r"NT:\s*([^,)]*)",string)[0]