Python Regex:删除可选字符

2024-03-29 02:36:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有可选字符的regex模式,但是在输出处我想删除这些可选字符。示例:

string = 'a2017a12a'    
pattern =  re.compile("((20[0-9]{2})(.?)(0[1-9]|1[0-2]))")
result = pattern.search(string)
print(result)

我可以有这样的匹配,但我想要的输出是:

^{pr2}$

谢谢。在


Tags: re示例searchstring模式result字符regex
3条回答

您只需将re.sub与模式\D(=不是数字)一起使用:

>>> import re
>>> string = 'a2017a12a'
>>> re.sub(r'\D', '', string)
'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

输出

^{pr2}$

Regex Demo

试试这个:

import re
string = 'a2017a12a'    
pattern =  re.findall("(\d+)", string)  # this regex will capture only digit
print("".join(p for p in pattern))  # combine all digits

输出:

^{pr2}$

相关问题 更多 >