Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何区分组引用和其后面的数字?_Python_Regex - Fatal编程技术网

Python 如何区分组引用和其后面的数字?

Python 如何区分组引用和其后面的数字?,python,regex,Python,Regex,我试图替换字符串中某个特定数字的所有出现。例如,假设我想用另一个数字替换给定数字的特定实例: >>> number1 = 33 >>> number2 = 1 >>> re.sub('(foo)%i' % number1, '\\1%i' % number2, 'foo33') Traceback (most recent call last): File "<stdin>", line 1, in ? File "/ho

我试图替换字符串中某个特定数字的所有出现。例如,假设我想用另一个数字替换给定数字的特定实例:

>>> number1 = 33
>>> number2 = 1
>>> re.sub('(foo)%i' % number1, '\\1%i' % number2, 'foo33')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/home/david_clymer/Development/VistaShare/ot_git/lib/python2.4/sre.py", line 142, in sub
    return _compile(pattern, 0).sub(repl, string, count)
  File "/home/david_clymer/Development/VistaShare/ot_git/lib/python2.4/sre.py", line 260, in filter
    return sre_parse.expand_template(template, match)
  File "/home/david_clymer/Development/VistaShare/ot_git/lib/python2.4/sre_parse.py", line 784, in expand_template
    raise error, "invalid group reference"
sre_constants.error: invalid group reference
>>> re.sub('(foo)%i' % number1, '\\1 %i' % number2, 'foo33')
'foo 1'
编号1=33 >>>数字2=1 >>>re.sub('(foo)%i'%number1',\\1%i'%number2',foo33') 回溯(最近一次呼叫最后一次): 文件“”,第1行,是否在中? 文件“/home/david_clymer/Development/VistaShare/ot_git/lib/python2.4/sre.py”,第142行,子部分 返回编译(模式,0).sub(repl,字符串,计数) 文件“/home/david_clymer/Development/VistaShare/ot_git/lib/python2.4/sre.py”,第260行,在过滤器中 返回sre_parse.expand_模板(模板,匹配) expand_模板中的文件“/home/david_clymer/Development/VistaShare/ot_git/lib/python2.4/sre_parse.py”,第784行 引发错误,“无效的组引用” sre_constants.error:无效的组引用 >>>re.sub('(foo)%i'%number1',\\1%i'%number2',foo33') “富1”
如何防止组引用与以下数字混淆?

显然,可以使用
\g
引用已命名的组:

>>re.sub('(?Pfoo)%i'%number1',\\g%i'%number2',foo33')
“foo1”
re.sub()
的python文档实际上解释了这一点。如图所示:

重新导入
数字1=33
数字2=1
打印子目录('(foo)%i'%number1',\g%i'%number2',foo33')
re.sub(模式、应答、字符串、计数=0、标志=0)

除了如上所述的字符转义和反向引用之外 上面,
\g
将使用名为 名称,由
(?P..)
语法定义<代码>\g使用 对应组号<因此,code>\g相当于
\2
,但 在替换中没有歧义,例如
\g0
<代码>\20将是 解释为提及第20组,而非提及第2组 后跟文字字符“0”。反向参考
\g
由RE匹配的整个子字符串中的替换项


这是不久前在这里被问到的。让我发现这个问题……可能想考虑R′g…相反,它是为了逃逸字符串literal@JonClements:我正在这样做…但是括号中的值显然在显示时被屏蔽了。我想Jon说的是使用Python的原始字符串表示法,这样你就不必重复反斜杠:
r'\g'
,而不是
'\\g'
。此外,您还可以对编号的组使用命名组语法,如@eyquem所示。
>>> re.sub('(?P<prefix>foo)%i' % number1, '\\g<prefix>%i' % number2, 'foo33')
'foo1'
import re

number1 = 33
number2 = 1
print re.sub('(foo)%i' % number1, '\g<1>%i' % number2, 'foo33')