python - 如何在 Python 中使用匹配的组和变量

标签 python regex

Python 新手。这可能很简单,但我还没有找到答案。

rndStr = "20101215"
rndStr2 = "20101216"
str = "Looking at dates between 20110316 and 20110317"
outstr = re.sub("(.+)([0-9]{8})(.+)([0-9]{8})",r'\1'+rndStr+r'\2'+rndStr2,str)

我正在寻找的输出是:

Looking at dates between 20101215 and 20101216

但我得到的是:

P101215101216

两个 rndStr 的值并不重要。假设它是随机的或取自用户输入(为了简单起见,我将静态值放在这里)。感谢您的帮助。

最佳答案

您的反向引用不明确。您的替换字符串变为

\120101215\220101216

这是两个要反向引用的相当大的数字:)

要解决它,请使用以下语法:

r'\g<1>'+rndStr+r'\g<2>'+rndStr2 

你也有太多的括号(或者“括号”,如果你像我一样说英式英语的话:) - 你不需要在 [0-9]{8} 部分周围加上括号你没有反向引用:

re.sub("(.+)[0-9]{8}(.+)[0-9]{8}",...

应该足够了。

(并且,如其他地方所述,不要将 str 用作变量名。除非您想花很长时间调试为什么 str.replace() 不不再工作了。不是说我曾经那样做过……不。:)

所以整个事情变成了:

import re
rndStr = "20101215"
rndStr2 = "20101216"
s = "Looking at dates between 20110316 and 20110317"
outstr = re.sub("(.+)[0-9]{8}(.+)[0-9]{8}", r'\g<1>'+rndStr+r'\g<2>'+rndStr2, s) 
print outstr

制作:

Looking at dates between 20101215 and 20101216

关于python - 如何在 Python 中使用匹配的组和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5331985/

相关文章:

java - 使用带花括号的 split() 时出错 "{"

python - Django表格错误打印

python - 在数据帧的列上使用 sklearn 的 LabelEncoder

python - 在不使用用户函数的情况下使用不同名称将图像保存在For循环中(scikit-Python)

java - Android/Java 中删除\b

regex - cucumber 正则表达式

javascript - 使用Python脚本的Heroku Node.js

mpi 中的 Python 多处理

JavaScript RegEx 只允许字母数字字符和一些特殊字符

ios - 为什么此 Regex 代码不适用于 P.O.箱子串?