簡體   English   中英

正則表達式在開頭和結尾突出顯示新行字符

[英]regex to highlight new line characters in the beginning and end

我試圖弄清楚如何編寫一個簡單的正則表達式,該正則表達式僅在換行符出現在某些數據的開頭或結尾時才會突出顯示,同時保留換行符。

在下面的示例中,第 1 行和第 14 行都是新行。 這是我試圖突出顯示的僅有的兩行,因為它們出現在數據的開頭和結尾。


import regex as re
from colorama import Fore, Back

def red(s):
    return Back.RED + s + Back.RESET

with open('/tmp/1.py', 'r') as f:
    data = f.read()

print(
    re.sub(r'(^\n|\n$)', red(r'\1'), data)
)

在 open 表達式中,數據與上面發布的示例內容相同。

在上面的例子中,這是我得到的結果:

在此處輸入圖片說明

如您所見,第 1 行缺少紅色突出顯示,並一直跨越第 14 行。我希望顏色在每個新行字符中只出現一次。

您實際上可以使用正則表達式,但沒有“多行”標志。 然后它將整個字符串視為一個,您實際上將匹配您想要的輸出。

^\n|\n$

在這里您可以看到有兩個匹配項。 如果您刪除前面或最后的新行,匹配將消失。 在正則表達式行的末尾設置或禁用 multilene 標志。 你也可以用你的語言做到這一點。

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

在閱讀了所有的評論和建議,並結合了其中的一部分之后,我終於有了一個工作版本。 對於任何有興趣的人:

如果不編寫特定於操作系統的檢查,我無法克服的一個問題是如何為 Windows 添加額外的新行。

挑選的幾個亮點:

  • 不能為\\n着色。 所以用空格和換行符替換它。
  • 尚未對此進行測試,但是通過擺脫組替換,也可以將其應用於字節。
  • 可以通過 colorama 中的init獲得支持的 Windows

import regex as re
from colorama import Back, init

init() # for windows

def red(s):
    return Back.RED + s + Back.RESET

with open('/tmp/1.py', 'r') as f:
    data = f.read()

fist_line = re.sub('\A\n', red(' ')+'\n', data)
last_line = re.sub('\n\Z', '\n'+red(' '), fist_line)
print(last_line)

操作系統/Linux

在此處輸入圖片說明

視窗

在此處輸入圖片說明

我找到了一種似乎可以讓您匹配整個字符串的開始/結束的方法。 請參閱https://www.regular-expressions.info/anchors.html 中的“字符串的永久開頭和字符串錨點的結尾”部分

\\A只在字符串的開頭匹配。 同樣, \\Z只在字符串的末尾匹配。

我在這里創建了一個演示https://regex101.com/r/n2DAWh/1

正則表達式為: (\\A\\n|\\n\\Z)

暫無
暫無

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

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