Text-Processing
使用 Perl 從文本中刪除特定正則表達式的所有實例
我正在尋找正確的 Perl 單行程式碼來從文本文件中刪除特定正則表達式的所有實例。
即,我想刪除所有實例
$$ immediately followed by a capital letter, then followed by any number of characters and spaces until $$. 例如,
[CP 5.491]
或[MS 283: 56 (variant) in Colapietro, 1989, p. XIV]
。 我想在 Perl 中完成此操作,因為我編寫的用於處理我的文件的簡單腳本已經在該語言中。編輯:
在嘗試了下面兩個完全足夠的答案之後,我意識到我在最初的問題中犯了一個錯誤(對不起!):我還需要刪除左括號後面跟著
cf
而不是大寫字母的實例,例如[cf. CP 2.282]
。我將如何添加該參數?
去除:
- 一個
[
字元 (\[
)- 緊跟大寫字母(
[A-Z]
僅限 Ascii)- 或(交替)由字元串
cf
(([A-Z]|cf)
)。- 然後是任意數量的字元和空格(
[^]]
不是 a]
)- 直到
]
(\]
)。您可以使用(在 Perl 中)以下任何一種:
\[([A-Z]|cf)[^]]\] # Ascii uppercase, avoid `]` [[]([A-Z]|cf)[^]][]] # A bit more confusing expression of the same. [[]([A-Z]|cf).*?[]] # Use a lazy quantifier (the shorter match). [[](\p{Lu}|cf).*?[]] # Unicode property: Letter Uppercase. \[(\p{Lu}|cf).*?\] # Probably easier to read.
如果您不使用否定範圍表達式 (
[^]]
) 或惰性匹配 (.*?
),則表達式將匹配整個字元串:this part [CP 5.491] or this part [cf 283: 56 in Colapietro, 1989, p. XIV]
不是每個部分。
perl -pe '$_ =~ s/\[(\p{Lu}|cf).*?\]//g' file