繁体   English   中英

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

[英]Python Regex: Remove optional characters

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

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

正则表达式演示

您可以只将re.sub\\D (=不是数字):

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

试试这个:

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

输出:

201712

如果要从字符串中删除所有字符,则可以执行此操作

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

输出:

'201712'

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

    import re

    #method 1
    string = 'a2017a12a'
    print (re.sub(r'\D', '', string))

    #method 2
    pattern =  re.findall("(\d+)", string)
    print("".join(p for p in pattern))

您也可以参考下面的文档以了解更多信息。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM