PAT1050 String Subtraction (20分) 用陣列即可
阿新 • • 發佈:2020-07-03
# 正則表示式基礎知識
#
#
#
#
#
# 使用正則表示式時,能用簡單表示式,就不要用複雜的表示式。因為越複雜的正則表示式效率反而不高且易讀性極差。
#
#
#
# 一.概述
#
#
# 正則表示式,Regular
# Expression,縮寫為regex、regexp、RE等。 正則表示式是文字處理極為重要的技術,用它可以對字串按照某種規則進行檢索、替換。
# Thompson將正則表示式引入到Unix中文字編輯器ed和grep命令中,由此正則表示式普
# 及開來。
#
# 二.分類
#
#
# BRE
# 基本正則表示式,grep、sed、vi等軟體支援。vim有擴充套件。
#
# ERE
# 擴充套件正則表示式,egrep(grep - E)、sed - r等。#
# PCRE
# 幾乎所有高階語言都是PCRE的方言或者變種。Python從1
# .6
# 開始使用SRE正則表示式引擎,可以認為是PCRE
# 的子集,見模組re。
#
#
# 三.基本語法
#
# 1 >.元字元(metacharacter)
#
#
# .
# 匹配除換行符外任意一個字元。
#
# [abc]
# 字元集合,只能表示一個字元位置。匹配除去集合內字元的任意一個字元。
#
# [ ^ abc]
# 字元集合,只能表示一個字元位置。匹配除去集合內字元的任意一個字元。
#
# [a - z]
# 字元範圍,也是集合,表示一個字元位置匹配所包含的字元。類似的還有[A - Z], [0 - 9]。#
# [ ^ a - z]
# 字元範圍,也是個集合,表示一個字元位置匹配除去集合內字元的任意一個字元。
#
# \b
# 匹配單詞的邊界。
#
# \B
# 不匹配單詞的邊界。
#
# \d
# [0 - 9]
# 匹配1位數字。
#
# \D
# [ ^ 0 - 9]匹配1位數字。
#
# \s
# 匹配1位空白字元,包括換行符, 製表符,空格。例如:[\f\r\n\t\v]
#
# \S
# 匹配1位非空白字元。
#
# \w
# 匹配[a - zA - Z0 - 9
# _], 包括中文的字。
#
# \W
# 匹配\w之外的字元。
#
# 2 >.轉義
#
# 凡是在正則表示式中有特殊意義的符號,如果想使用它的本意,請使用\轉義。 反斜槓自身,得使用\ \# \
# \r、\n還是轉義後代表回車、換行
# 3 >.重複
#
#
# *
# 表示前面的正則表示式會重複0次或多次。
#
# +
# 表示前面的正則表示式至少重複1次。
#
# ?
# 表示前面的正則表示式會重複出現0次活1次。
#
# {n}
# 重複固定的n次。
#
# {n, }
# 重複至少n次。
#
# {n, m}
# 重複n到m次。
#
# 4 >.或
#
# x | y
# 匹配x或者y。
# 5 >.捕獲
#
#
# (pattern)
# 使用小括號指定一個子表示式,也叫分組捕獲後會自動分配組號從1開始可以改變優先順序。
#
# \數字
# 匹配對應的分組。
#
# (?:pattern)
# 如果僅僅為了改變優先順序,就不需要捕獲分組。
#
# (? < name > exp)
# 或(?'name'
# exp)
# 命名分組捕獲,但是可以通過name訪問分組。Python的re標準庫愈發必須是(?P < name > exp)。
#
# 6 >.零寬斷言
#
# (?=exp)
# 零寬度正預測先行斷言,斷言exp一定在匹配配的右邊出現,也就是說斷言後面一定跟個exp。
#
# (? <= exp)
# 零寬度正回顧後發斷言,斷言exp一定出現在匹配的左邊出現,也就是說前面一定有個exp字首。
# 7 >.負向零寬斷言
#
# (?!exp)
# 零寬度負預測先行斷言,斷言exp一定不會出現在右側,也就是說斷言後面一定不是exp。
#
# (? < !exp)
# 零寬度負回顧後發斷言,斷言exp一定不能出現在左側,也就是說斷言前面一定不能是exp。
# 8 >.註釋
#
# (? # comment)
# 註釋,比如f(?=oo)(? # 這個後斷言不捕獲)
# 9 >.貪婪與非貪婪(預設就是貪婪模式,也就是說盡量多匹配匹配更長的字串。)
#
#
# *?
# 匹配任意次,但儘量可能少重複。
#
# +?
# 匹配自少一次,但儘可能少重複。
#
# ??
# 匹配0次或1次,但儘可能少重複。
#
# {n, }?
# 匹配至少n次,但儘可能少重複。
#
# {n, m}?
# 匹配至少n次,至多m次,但儘可能少重複。
#
# 10 >.引擎選項
#
#
# IgnoreCase
# 匹配時忽略大小寫。
#
# Singleline
# 單行模式,可以匹配所有字元,包括\n。
# 需要注意的是,在單行模式中,"."
# 可以匹配所有字元,包括換行符。"^"
# 表示整個字串的開頭,“$”整個字串的結尾。
#
# Multiline
# 多行模式, ^ 行首,$行尾。
# 需要注意的是,在多行模式中,"."
# 可以匹配除了換行符之外的字元,多行不影響“.”點號。"^"
# 表示行首,“¥”表示行尾,只不過這裡的行是每一行。
#
# IgnorePatternWhitespace
# 忽略表示式中的空白字元,如果要使用空白字元用轉義, # 可以用來做註釋。
#
# 11 >.單行模式和多行模式注意事項
#
#
# 單行模式:
# .可以匹配所有字元,包括換行符
# ^ 表示整個字串的開頭,$整個字串的結尾
#
# 多行模式:
# .可以匹配除了換行符之外的字元,多行不影響.點號
# ^ 表示行首,$行尾,只不過這裡的行是每一個行
#
# 預設模式:
# 可以看做待匹配的文字是一行,不能看做多行,.點號不能匹配換行符, ^ 和$表示行首和行尾,而行首行尾就
# 是整個字串的開頭和結尾
#
# 單行模式:
# 基本和預設模式一樣,只是.點號終於可以匹配任意一個字元包括換行符,這時所有文字就是一個長長的只有
# 一行的字串。 ^ 就是這一行字串的行首,$就是這一行的行尾。
#
# 多行模式:
# 重新定義了行的概念,但不影響.點號的行為, ^ 和$還是行首行尾的意思,只不過因為多行模式可以識別換行
# 符了。"開始"
# 指的是\n後緊接著下一個字元;
# "結束"
# 指的是\n前的字元,注意最後一行結尾可以沒有\n
#
#
# 簡單講,單行模式隻影響.點號行為,多行模式重新定義行影響了 ^ 和$
#
# 注意: 注意字串中看不見的換行符, \r\n會影響e$的測試,e$只能匹配e\n