File size: 3,643 Bytes
c278a4b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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 = """

| 字元 | 意義 / 用法 | 備註 |
| :--- | :--- | :--- |
| **字面意義的字元**<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.")