我有一个带有可选字符的正则表达式模式,但是在输出中我想删除那些可选字符。示例:
string = 'a2017a12a'
pattern = re.compile("((20[0-9]{2})(.?)(0[1-9]|1[0-2]))")
result = pattern.search(string)
print(result)
我可以进行这样的匹配,但我想要的输出是:
desired output = '201712'
谢谢。
请您参考如下方法:
您已经捕获了组中的预期数据,现在您可以使用 re.sub 将整个匹配替换为 group1 和 group2 的内容。
尝试修改后的 Python 代码,
import re
string = 'a2017a12a'
pattern = re.compile(".*(20[0-9]{2}).?(0[1-9]|1[0-2]).*")
result = re.sub(pattern, r'\1\2', string)
print(result)
请注意,我是如何在模式周围添加 .* 的,因此数据周围的任何额外字符都会被匹配并被删除。此外,删除了不需要的额外括号。这也适用于文本周围可能有其他数字的字符串,例如 hello123 a2017a12a some other 99 numbers
输出,
201712
