python - 使用变量的python 正规表达式 subsituting表达式

  显示原文与译文双语对照的内容
0 0

我想实现的是用 python 正规表达式 替换一个带有可变( 变量的内容)的字符串。 因为我需要保留一些匹配表达式,所以我使用 13 组匹配参数。

我的正规表达式/子目录如下所示:


pattern ="1" + id +"3" b
out = re.sub(r'(;11=)(w+)(;)',r'%s' % pattern, line)

看起来正在发生的是 13 没有被添加到输出。

我还尝试了替换表达式:

 
r'1%s3'%orderid

 

但我得到了类似的结果。 关于可能修复这里问题的任何建议?

时间: 原作者:

0 0

你需要使用原始字符串,或者双击反斜杠:


pattern = r"1" + id + r"3"

或者


pattern ="1" + id + r"3"

在常规 python 字符串文本中,number 被解释为八进制字符代码:


>>> '1'
'x01'

在原始字符串文本中,反斜杠没有特殊含义:


>>> r'1'
'1'

原始字符串文本只是一个符号,而不是一个类型。 r'''' 产生字符串,并且它们在源代码中解释反斜杠的方式有所不同。

注意,由于group和group3匹配文本,所以根本不需要使用替换;只需使用以下命令:


out = re.sub(r';11=w+;', ';11=%s;' % id, line)

或者使用后面的查看和前进,并且不必重复这些文字:


out = re.sub(r'(?<=;11=)w+(?=;)', id, line)

演示:


>>> import re
>>> line = 'foobar;11=spam;hameggs'
>>> id = 'monty'
>>> re.sub(r';11=w+;', ';11=%s;' % id, line)
'foobar;11=monty;hameggs'
>>> re.sub(r'(?<=;11=)w+(?=;)', id, line)
'foobar;11=monty;hameggs'

原作者:
0 0

这将不适用:


pattern ="1" + id +"3"
#.. .
r'%s' % pattern

r 前缀仅影响文本的解释方式。 因此,r'%s' 表示 %s 将被解释为 raw—but,这与它们在不使用 r的情况下解释相同。 同时,pattern 具有非原始文本 "1""3",因此它已经是控件a 和控件c,甚至在你到达 % 之前。

你需要的是:


pattern = r"1" + id + r"3"
#.. .
'%s' % pattern

但是,实际上根本不需要 % 格式;只需使用 pattern 本身,就可以得到完全相同的内容。

原作者:
...