| import re |
|
|
| file_path = 'src/index.qmd' |
|
|
| with open(file_path, 'r', encoding='utf-8') as f: |
| text = f.read() |
|
|
| |
| 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 = """ |
| |
| | 字元 | 意義 / 用法 | 備註 | |
| | :--- | :--- | :--- | |
| | **字面意義的字元**<br>(literal characters) | 例如:`a` `b` `1` `2` `_` `"` `<` `>` | | |
| | **特殊字元**<br>**metacharacters** | | | |
| | `\\t` | **t**ab(定位字元) | | |
| | `\\n` | **n**ewline(換行字元);<br>Windows:`\\r\\n`(CR LF)<br>UNIX/Linux/macOS:`\\n`(LF) | | |
| | `\\s` | white **s**pace(空白字元) | 包含空格(space)及 tab 等 | |
| | `.`(*句點*) | 比對任意字元(`\\n` 除外) | | |
| | **元字元**<br>(必須以 `\\` 跳脫才能進行文字比對) | | | |
| | `\\` | 跳脫 (escape) 字元 | | |
| | `|` | 替代(或) | | |
| | `()` | 群組;`(?:)` 為非擷取群組 | | |
| | `[]` | 字元類別;恰好比對一個字元 | 範例:比對任一英文母音字母 `[aeiou]` | |
| | `{}` `*` `?` `+` | 量詞 | | |
| | `^` `$` | 錨點(零寬度) | | |
| | `?` | (1) 作為量詞時,作用於緊鄰其左方的一個字元、字元類別或群組;<br>(2) 作為非貪婪 non-greedy 或懶惰 lazy 指定符 | | |
| | **錨點 anchor**<br>(零寬度:僅比對位置,不比對字元) | | | |
| | `\\b` | 詞邊界 | 範例:空白字元(或標點符號)與文字字元之間的位置 | |
| | `^` | 脫字符號:字串開頭 | | |
| | `$` | 錢字符號:字串結尾 | | |
| | **量詞 quantifier**<br>(作用於緊鄰其左方的一個字元、字元類別或群組) | | | |
| | `*` | 零次或多次 | | |
| | `+` | 一次或多次 | 亦即「至少出現一次」 | |
| | `?` | 零次或一次 | 亦即「可有可無」 | |
| | `{n}` | 恰好 *n* 次 | | |
| | `{n,m}` | 至少 *n* 次,至多 *m* 次 | | |
| | `{n,}` | 至少 *n* 次,無上限 | | |
| | **字元類別** | 以 `[]` 括起的字元 ── 恰好比對一個字元 | | |
| | **範圍** | `[a-z]` 比對任一英文小寫字母;<br>`\\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`<br>`\\P{Han}`<br>(相反集合) | 代表對應小寫字元類別之**否定**的字元類別 | `\\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.") |
|
|