![](/img/trans.png)
[英]Replace all occurrences of 'pattern' in part of a string using Python regex
[英]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.