簡體   English   中英

插入空格以分隔相連的字母和數字字符串-Python RegEx

[英]Insert space to separate conjoined alpha and numeric strings - Python RegEx

在Python中,我需要創建一個正則表達式,在任何串聯的AlphaNum組合之間插入一個空格。 例如,這就是我想要的:

8min15sec ==> 8 min 15 sec
7m12s ==> 7 m 12 s
15mi25s ==> 15 mi 25 s

RegEx101演示

我對在線找到的解決方案感到困惑,但是這些解決方案對於我來說太復雜了,無法解析/修改。 例如,我有這個:

[a-zA-Z][a-zA-Z\d]*

但它僅標識第一個插入點:8Xmin15sec(X)

和這個

(?<=[a-z])(?=[A-Z0-9])|(?<=[0-9])(?=[A-Z])

但它只能找到這一點:8minX15sec(X)

我可以肯定地使用具有完整語法的指針來查找每個插入點並插入空格。

RegEx101演示 (與以上相同的鏈接)

您可以使用此正則表達式來標記點,該點是數字和字母的邊界,其順序為數字先於字母,反之亦然。

(?<=\d)(?=[a-zA-Z])|(?<=[a-zA-Z])(?=\d)

此正則表達式(?<=\\d)(?=[a-zA-Z])標記一個點,該點的正向查找字體為正,正向查找輪廓為數字。

類似地, (?<=[a-zA-Z])(?=\\d)作用相同,但順序相反。

然后,用空格替換該標記。

演示版

這是相同的示例python代碼。

import re
arr = ['8min15sec', '7m12s', '15mi25s']
for s in arr:
 print (s + ' --> ' + re.sub('(?<=\d)(?=[a-zA-Z])|(?<=[a-zA-Z])(?=\d)', ' ',s))

哪個打印以下輸出,

8min15sec --> 8 min 15 sec
7m12s --> 7 m 12 s
15mi25s --> 15 mi 25 s

如何使用以下方法:

import re

for test in ['8min15sec', '7m12s', '15mi25s']:
    print(re.sub(r'(\d+|\D+)', r'\1 ', test).strip())  

這會給你:

8 min 15 sec 
7 m 12 s 
15 mi 25 s

怎么樣:

"(\d+)([a-zA-Z]+)"

"\1 \2 "

https://regex101.com/r/yvqCtQ/2

在python中:

In [59]: re.sub(r'(\d+)([a-zA-Z]+)', r'\1 \2 ',  '8min15sec')
Out[59]: '8 min 15 sec '

暫無
暫無

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

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