import re file_path = 'src/index.qmd' with open(file_path, 'r', encoding='utf-8') as f: text = f.read() # We need to find the section between "## 正規表示式摘要\n\n" and "\n\n例如,若欲找出文件中" start_marker = "## 正規表示式摘要" end_marker = "例如,若欲找出文件中" start_idx = text.find(start_marker) end_idx = text.find(end_marker) if start_idx != -1 and end_idx != -1: before = text[:start_idx + len(start_marker)] after = text[end_idx:] clean_table = """ | 字元 | 意義 / 用法 | 備註 | | :--- | :--- | :--- | | **字面意義的字元**
(literal characters) | 例如:`a` `b` `1` `2` `_` `"` `<` `>` | | | **特殊字元**
**metacharacters** | | | | `\\t` | **t**ab(定位字元) | | | `\\n` | **n**ewline(換行字元);
Windows:`\\r\\n`(CR LF)
UNIX/Linux/macOS:`\\n`(LF) | | | `\\s` | white **s**pace(空白字元) | 包含空格(space)及 tab 等 | | `.`(*句點*) | 比對任意字元(`\\n` 除外) | | | **元字元**
(必須以 `\\` 跳脫才能進行文字比對) | | | | `\\` | 跳脫 (escape) 字元 | | | `|` | 替代(或) | | | `()` | 群組;`(?:)` 為非擷取群組 | | | `[]` | 字元類別;恰好比對一個字元 | 範例:比對任一英文母音字母 `[aeiou]` | | `{}` `*` `?` `+` | 量詞 | | | `^` `$` | 錨點(零寬度) | | | `?` | (1) 作為量詞時,作用於緊鄰其左方的一個字元、字元類別或群組;
(2) 作為非貪婪 non-greedy 或懶惰 lazy 指定符 | | | **錨點 anchor**
(零寬度:僅比對位置,不比對字元) | | | | `\\b` | 詞邊界 | 範例:空白字元(或標點符號)與文字字元之間的位置 | | `^` | 脫字符號:字串開頭 | | | `$` | 錢字符號:字串結尾 | | | **量詞 quantifier**
(作用於緊鄰其左方的一個字元、字元類別或群組) | | | | `*` | 零次或多次 | | | `+` | 一次或多次 | 亦即「至少出現一次」 | | `?` | 零次或一次 | 亦即「可有可無」 | | `{n}` | 恰好 *n* 次 | | | `{n,m}` | 至少 *n* 次,至多 *m* 次 | | | `{n,}` | 至少 *n* 次,無上限 | | | **字元類別** | 以 `[]` 括起的字元 ── 恰好比對一個字元 | | | **範圍** | `[a-z]` 比對任一英文小寫字母;
`\\p{Han}`(最完整的寫法)或 `[一-龥]` 或 `[\\u4E00-\\u9FFF]` 或 `[\\x{4E00}-\\x{9FFF}]`,共 20,992 個基本中文字元 | 起始字元的 Unicode 碼位必須較小;中日韓統一表意文字(CJK Unified Ideographs)涵蓋最常見的 CJK 字元;Zed 及 Calibre ebook-viewer 皆可接受;CudaText 使用最後一種格式處理一般 Unicode 範圍 | | **快捷寫法** | `^` 在 `[]` 中表示該類別的「相反」(也就是所有此類別以外的字元) | 範例:比對*任何*非英文母音的字元 `[^aeiou]` | | `\\d` | 數字,等同於 `[0-9]` | | | `\\w` | 「文字」字元;`\\d` 加上 `[a-zA-Z]` 加上 `_`(底線字元;underscore),對於非英文字母書寫的語言可能還包含更多字元 | `\\w` 的定義取決於特定的正規表示式引擎;部分引擎會納入中日韓字元及含附加符號的字元(如 é、ç、ü);其他引擎則不會。 | | `\\D` `\\S` `\\W`
`\\P{Han}`
(相反集合) | 代表對應小寫字元類別之**否定**的字元類別 | `\\D`、`\\S`、`\\W`、`\\P{Han}` 分別為非數字、非空白、非文字及非中日韓字元 | """ with open(file_path, 'w', encoding='utf-8') as f: f.write(before + clean_table + after) print("Table 1 fixed.") else: print("Markers not found.")