[英]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))
您也可以參考下面的文檔以了解更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.