簡體   English   中英

在特定字符之間插入空格,但如果后面緊跟特定字符則不插入正則表達式

[英]Insert space between specific characters but not if followed by specific characters regex

我希望使用python regex在Alpha字符和數字之間插入一個空格(Alpha始終以數字開頭),但不要在(數字和連字符)之間(在數字和下划線之間)插入空格。

理想情況下,我希望它替換行上的所有此類示例(請參見下面的第三個示例字符串) ,但是即使僅執行第一個示例也很棒。

我已經走了這么遠:

import re
item = "Bob Ro1-1 Fred"
txt = re.sub(r"(.*)(\d)", r"\1 \2", item)
print(txt) #prints Bob Ro1 -1 Fred (DESIRED WOULD BE Bob Ro 1-1 Fred)

我試過貼? 在各個地方進行搜索,但是還沒有找到魔術。

示例字符串: Original ==> Desired output
1.“ Bob Ro1 Sam cl3” ==> “ Bob Ro 1 Sam cl 3”
2.“ Some Guy ro1-1 Sam” ==> “ Some Guy ro1-1 Sam”
3.“ ribrib ribbit ro3_2 bob wow cl1-3” ==> “ ribbit ribbit ro 3_2 bow wow cl1-3”

您可以使用

re.sub(r'([^\W\d_])(\d)', r'\1 \2', s)

正則表達式演示

使用環視方法的一種變體

re.sub(r'(?<=[^\W\d_])(?=\d)', ' ', s)

([^\\W\\d_])(\\d)正則表達式匹配並將任何單個字母捕獲到組1中,並將下一個數字捕獲到組2中。 然后, \\1 \\2替換模式將組1中的字母,空格和組2中的數字插入到結果字符串中。

(?<=[^\\W\\d_])(?=\\d)與字母和數字之間的位置匹配,因此,替換字符串僅包含一個空格。

參見Python演示

import re
strs = [ 'Bob Ro1-1 Fred', 'Bob Ro1 Sam cl3', 'Some Guy ro1-1 Sam', 'ribbet ribbit ro3_2 bob wow cl1-3' ]
rx = re.compile(r'([^\W\d_])(\d)')
for s in strs:
    print(re.sub(r'([^\W\d_])(\d)', r'\1 \2', s))
    print(re.sub(r'(?<=[^\W\d_])(?=\d)', ' ', s))

輸出:

Bob Ro 1-1 Fred
Bob Ro 1-1 Fred
Bob Ro 1 Sam cl 3
Bob Ro 1 Sam cl 3
Some Guy ro 1-1 Sam
Some Guy ro 1-1 Sam
ribbet ribbit ro 3_2 bob wow cl 1-3
ribbet ribbit ro 3_2 bob wow cl 1-3

您需要先看后面,再看后面:

(?<=[a-zA-Z])(?=[0-9])

代碼應為re.sub(r"(?<=[a-zA-Z])(?=[0-9])", r" ", item)

暫無
暫無

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

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