簡體   English   中英

Python替換使用正則表達式找到的所有匹配項

[英]Python replace all occurrences found using regex

在python中,嘗試替換所有使用正則表達式找到的字符串,例如:

'10am 11pm 13am 14pm 4am'

'10 am 11 pm 13 am 14 pm 4 am'

我試過了

re.sub('([0-9].*)am(.*)', r'\1 am \2', ddata) 

但這僅代替了最后一次出現。

import re
regex = re.compile('([0-9].*)am+', re.S)
myfile =  '10am 11pm 13am 14pm 4am'
myfile2 = regex.sub(lambda m: m.group().replace(r'am',r" am ",1), myfile)
print(myfile2)

僅替換“ am”的首次出現

對我的預期結果'10 am 11pm 13 am 14pm 4 am'

將捕獲組用於數字和“ am”或“ pm”字符串,然后僅在組之間用空格替換。

import re

s = '10am 11pm 13am 14pm 4am'

subbed = re.sub(r'(\d+)([ap]m)', r'\1 \2', s)
print(subbed)
# 10 am 11 pm 13 am 14 pm 4 am

如果您確實想要使用正則表達式而不是如上所述的純字符串replace方法的解決方案,則可以使用以下代碼段。

import re
myfile = '10am 11pm 13am 14pm 4am'
myfile2 = re.sub(r'(\d+)(am)', lambda m: '{} {}'.format(*m.groups()), myfile, 0)
print(myfile2)

您可以執行此操作而無需使用re:

'10am 11pm 13am 14pm 4am'.replace('a',' a').replace('p',' p')  

## Output: '10 am 11 pm 13 am 14 pm 4 am'

這將完成工作:

import re
myfile =  '10am 11pm 13am 14pm 4am'
re.sub(r'(\d+)(am|pm)', r'\1 \2', myfile)

這是測試輸出:

>>> import re
>>> myfile =  '10am 11pm 13am 14pm 4am'
>>> re.sub(r'(\d+)(am|pm)', r'\1 \2', myfile)
'10 am 11 pm 13 am 14 pm 4 am'
>>> 

編輯:這是處理您在評論中發布的字符串的相同解決方案的輸出:

>>> import re
>>> myfile = 'The amphitheater opens at 10am-11am and 3pm-7pm'
>>> re.sub(r'(\d+)(am|pm)', r'\1 \2', myfile)
'The amphitheater opens at 10 am-11 am and 3 pm-7 pm'
>>> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM