[英]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 標志。 你也可以用你的語言做到這一點。
在閱讀了所有的評論和建議,並結合了其中的一部分之后,我終於有了一個工作版本。 對於任何有興趣的人:
如果不編寫特定於操作系統的檢查,我無法克服的一個問題是如何為 Windows 添加額外的新行。
挑選的幾個亮點:
\\n
着色。 所以用空格和換行符替換它。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)
我找到了一種似乎可以讓您匹配整個字符串的開始/結束的方法。 請參閱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.