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.")