在正则表达式替换模式中,反向引用看起来像\1.如果要在该反向引用后包含一个数字,这将失败,因为该数字被认为是反向引用号的一部分:
# replace all twin digits by zeroes, but retain white space in between
re.sub(r"\d(\s*)\d", r"0\10", "0 1")
>>> sre_constants.error: invalid group reference
Run Code Online (Sandbox Code Playgroud)
替换模式r"0\1 0"可以正常工作,但在失败的示例中,反向引用\1被解释为\10.
如何将数字'0'与\1之前的反向引用分开?
如果我想在第一个组引用后插入"0",那么语法是什么?
import re
re.sub("(..)(..)", "\\1x\\2", "toto")
toxto
re.sub("(..)(..)", "\\10\\2", "toto")
sre_constants.error: invalid group reference
Run Code Online (Sandbox Code Playgroud)
错误,因为\ 10被解释为第10个参考组(这就是为什么在ed()中,组引用在[1-9]间隔中).
在上面的例子中,如何获得"to0to"?
我有这样的正则表达式模式:
([0-9]*)xyz
Run Code Online (Sandbox Code Playgroud)
我希望做这样的替换:
$10xyz
Run Code Online (Sandbox Code Playgroud)
问题是,它$1是一个捕获组,而这0只是我想要替换的数字.但正则表达式认为我要求捕获组$10而不是$1之后的零.
如何引用捕获组并立即使用数字跟随它?
在这种情况下使用JavaScript.
更新如下所述,我的代码确实运行良好.我使用的正则表达式测试程序被意外设置为PCRE而不是JavaScript.
p = r'([\,|\.]\d{1}$)'
re.sub(p, r"\1", v)
Run Code Online (Sandbox Code Playgroud)
工作,但我想在捕获组中添加零,而不是用捕获组'10'替换,我该怎么做?
re.sub(p, r"\10", v)
Run Code Online (Sandbox Code Playgroud)
失败:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 275, in filter
return sre_parse.expand_template(template, match)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sre_parse.py", line 802, in expand_template
raise error, "invalid group reference"
sre_constants.error: invalid group reference
Run Code Online (Sandbox Code Playgroud) 我试图re.sub在数字反向引用后直接使用带有数值的字符串.也就是说,如果我的替换值是15.00和我的反向引用\1,我的替换字符串将如下所示:
\115.00,正如预期的那样,error: invalid group reference因为它认为我的反引用组是115.
例:
import re
r = re.compile("(Value:)([-+]?[0-9]*\.?[0-9]+)")
to_replace = "Value:0.99" # Want Value:1.00
# Won't work:
print re.sub(r, r'\11.00', to_replace)
# Will work, but don't want the space
print re.sub(r, r'\1 1.00', to_replace)
Run Code Online (Sandbox Code Playgroud)
是否有一个不涉及的解决方案re.sub?
我是 python 的初学者,目前正在努力解决一些问题:
我想在一个字符串中进行一些更改。是否可以使用单个星号 (*) 作为几个字符的替代小丑?例如我有一个字符串:
string1 = "The new year is about to become an old year"
Run Code Online (Sandbox Code Playgroud)
我想使用这种模式来查找:
find:
*year*year*
replace it with:
*century*one*
Run Code Online (Sandbox Code Playgroud)
这将导致:
string1 = "The new century is about to become an old one"
Run Code Online (Sandbox Code Playgroud)
意思是“*”字符将替换“year”和“year”单词之间和之前的所有字符。那可能吗?