1. 程式人生 > 實用技巧 >PAT1050 String Subtraction (20分) 用陣列即可

PAT1050 String Subtraction (20分) 用陣列即可

# 正則表示式基礎知識
#
#
#
#
#
#   使用正則表示式時,能用簡單表示式,就不要用複雜的表示式。因為越複雜的正則表示式效率反而不高且易讀性極差。
#
#
#
# 一.概述
#
#
#   正則表示式,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