6

我对 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}"insidesearchString并替换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}:包含\d1 到 999 之间的数字。

任何帮助将不胜感激!

4

2 回答 2

8

问题是输入 IPvariableTest会导致替换字符串如下所示:

r'\18.8.8.8\2'

如您所见,第一个组引用是第 18 组,而不是第 1 组。因此,re抱怨组引用无效。

在这种情况下,您想改用以下\g<n>语法

r'\g<1>' + variableTest + r'\g<2>'

产生例如r'\g<1>8.8.8.8\g<2>'

于 2013-03-05T15:12:28.357 回答
1

re.sub(模式,repl,字符串,count=0,flags=0)

这是 re.sub() 的语法

你似乎调用标志 re.M 的方式应该像 flags=re.M,否则 python 会认为你的意思是 count=re.M

试一试,因为这是我唯一能决定的事情

还给我一个示例,说明您的 searchString 变量可能包含的内容

于 2013-03-05T15:09:40.967 回答