Python正则表达式:删除可选字符

时间:2019-04-29 08:45:57

标签: python regex

我有一个带有可选字符的正则表达式模式,但是在输出中我想删除那些可选字符。示例:

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

我可以有一个这样的比赛,但我想要的输出是:

desired output = '201712'

谢谢。

5 个答案:

答案 0 :(得分:2)

您已经按组捕获了预期的数据,现在您可以使用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

Regex Demo

答案 1 :(得分:1)

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

>>> import re
>>> string = 'a2017a12a'
>>> re.sub(r'\D', '', string)
'201712'

答案 2 :(得分:0)

尝试这个:

tools:ignore="MissingConstraints"

输出:

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

答案 3 :(得分:0)

如果要从字符串中删除所有字符,则可以这样做

import re
string = 'a2017a12a'
re.sub('[A-Za-z]+','',string)

输出:

'201712'

答案 4 :(得分:0)

您可以使用 re模块方法来获取所需的输出,例如:

jtc

您还可以参考下面的文档以获取更多知识。

https://docs.python.org/3/library/re.html