我有一个带有可选字符的正则表达式模式,但是在输出中我想删除那些可选字符。示例:
string = 'a2017a12a'
pattern = re.compile("((20[0-9]{2})(.?)(0[1-9]|1[0-2]))")
result = pattern.search(string)
print(result)
我可以有一个这样的比赛,但我想要的输出是:
desired output = '201712'
谢谢。
答案 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
答案 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)