簡體   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