我是Python的新手,实际上这是我的第一个脚本。
我正在努力使用Python的正则表达式。具体来说是re.sub()
我有以下代码:
variableTest = "192"
test = re.sub(r'(\$\{\d{1,2}\:)example.com(\})', r'\1' + variableTest + r'\2', searchString, re.M )
通过此操作,我尝试在host": "${9:example.com}"
内匹配searchString
之类的内容,并将example.com
替换为服务器名称或IP地址。
如果variableTest
包含IP,则会失败。我收到以下错误:
sre_constants.error: invalid group reference
我用variableTest
等于“127.0.0.1”,“1”,“192”,“192.168”测试了它。 “127.0.0.1”有效,其余则没有。如果我在其他人的前面加上一封信也可以。
variableTest
是一个字符串 - 已通过type(variableTest)
我完全迷失了为什么会这样。
如果我删除替换字符串中的r'\1'
,它也可以。 r'\1'
将包含${\d}:
,\d
包含1到999之间的数字。
任何帮助将不胜感激!
答案 0 :(得分:8)
问题是在variableTest
中放置IP会导致替换字符串如下:
r'\18.8.8.8\2'
如您所见,第一组引用是指第18组,而不是第1组。因此,re
会抱怨无效的组引用。
在这种情况下,您希望改为使用\g<n>
syntax:
r'\g<1>' + variableTest + r'\g<2>'
产生例如r'\g<1>8.8.8.8\g<2>'
。
答案 1 :(得分:1)
re.sub(pattern,repl,string,count = 0,flags = 0)
这是re.sub()
的语法你似乎在调用标志re.M的方式,应该像flags = re.M,否则python会把它当作你的意思是count = re.M
尝试一下,因为这是我唯一可以决定的事情
还举例说明了您的searchString变量可能包含的内容