第十週內容回顧
阿新 • • 發佈:2022-12-04
Python正則表示式
情況:在一個EXCEL檔案中,記錄了眾多公司的賬目,單位有萬元和億元,彼此混雜。現想把單位統一為萬元,且不顯示出來
法一:利用EXCEL的公式
= IF(VALUE(MID(B2,1,5)) < 1000, MID(B2,1,5)*10000, MID(B2, 1, 5))
此法比較受資料特徵侷限。如上述公式,只能應對千萬到百億之間的金額而且要位數固定
法二:用正則表示式
當然,C++11的<regex>庫也可以,但是這麼一個小東西python足夠了
python正則表示式
-
re.search(pattern, string) -> Optional[Match[AnyStr]]
-
re.findall(pattern, string) -> list[anystr]
查詢全部 -
re.sub(pattern, repl, string) -> the string
替換全部 -
re.split(pattern, string) -> list[anystr]
以pattern為界限分割
統統可加一個flags
選項
可以對正則表示式進行分組:
-
r"([a-z]+)([1-9]+)"
,括號分別編號為group(1)
,group(2)
-
r"(?P<name1>[a-z]+)([1-9]+)"
,在編號的基礎上,用(?P<name1>)
下面是一個例子
import re def convert_yi(matched): yi = float(matched.group('yi')) return str(format(yi * 10000, '.0f')) def convert_wan(matched): wan = float(matched.group('wan')) return str(format(wan, '.0f')) infile = open("D:\\codes\\test\\abc.csv", "r", encoding='UTF-8') outfile = open("D:\\codes\\test\\result.csv", "a", encoding='UTF-8') for line in infile.readlines(): temp = re.sub('(?P<yi>[-\.0-9]+)(億)', convert_yi, line) temp2 = re.sub('(?P<wan>[-\.0-9]+)(萬)', convert_wan, temp) outfile.write(temp2) infile.close() outfile.close()