簡體   English   中英

使用正則表達式在python中的逗號和破折號前后添加空格

[英]adding space before and after a comma and dash in python using regex

我已經看過很多關於這個的話題,也許我不明白什么,但在這樣的短語中:

“hello-goodbye C-GOOD”或“100.89 D-FARM”我想在像“.,-”這樣的字符前后添加一個空格,但我不想在 C-GOOD 或 D-FARM 中添加這些空格”

這是我想要的最終結果:“你好 - 再見 C-GOOD”“100 . 89 D-FARM”但無論我嘗試什么,我要么在所有東西上都有空格,要么在任何破折號上都沒有空格:

我要么得到:“hello - goodbye C - GOOD”“100 . 89 D - FARM”或“hello-goodbye C-GOOD”“100 . 89 D-FARM”這是我嘗試過的:

text= re.sub(r'([.,!?()-]+)^(?<!C)', r' \1 ', text)
text= re.sub(r'([.,!?()-]+)^(?<!C-)', r' \1 ', text)
text= re.sub(r'([.,!?()-]+)(?<!C-GOOD)', r' \1 ', text)
text= re.sub(r'([.,!?()-]+)(?!C-GOOD)', r' \1 ', text)

如果有人可以提供幫助或知道我做錯了什么,那就太好了。 謝謝。

我們可以在這里使用帶有回調函數的re.sub ,它將排除C-GOODD-FARM被替換:

inp = ["hello-goodbye C-GOOD", "100.89 D-FARM"]
def repl(m):
    if m.group() == "C-GOOD" or m.group() == "D-FARM":
        return m.group()
    else:
        return " - "
output = [re.sub(r'C-GOOD|D-FARM|[.,-]', repl, x) for x in inp]
print(output)  # ['hello - goodbye C-GOOD', '100 - 89 D-FARM']

這里的技巧在於正則表達式模式C-GOOD|D-FARM|[.,-] ,它會嘗試匹配逗號、點或破折號之前嘗試匹配C-GOODD-FARM re.sub然后將此匹配傳遞給回調函數,該函數僅在[.,-]分隔符的情況下添加空格。

不匹配.,-連接大寫字母。

import re

s = "hello-goodbye C-GOOD 100.89 D-FARM"

print(re.sub("(?<![A-Z])([.,-])(?![A-Z]+)", r" \g<1> ", s))
# hello - goodbye C-GOOD 100 . 89 D-FARM

暫無
暫無

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

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