time= [‘Amplitude’, ”, ‘Test Time’, \
‘2022/08/30 073216’, ‘2022/08/30 073233’,\
‘2022/08/30 073250’, ‘2022/08/30 073307’,\
‘2022/08/30 073324’, ”, ‘Phase’, ”, ‘Test Time’,\
‘2022/08/30 073216’, ‘2022/08/30 073233’, \
‘2022/08/30 073250’, ‘2022/08/30 073307’,\
‘2022/08/30 073324’]
import re
text = ‘2022/08/30 073216‘
#fmt = r”????/??/?? ??????” #這個不行
#pattn = “[\d]{4}/[01][\d]/[0123][\d] [\d]{6}”
pattn = r”[\d]{4}\/[01][\d]\/[0123][\d] [\d]{6}”
“””
[\d]{4} : 2022 #4個數字
\/ : /
[01] : 0 #0或1
[\d] : 8 #1個數字
\/ : /
[0123] : 3 #0 1 2 3 其中一個數字
[\d] : 0 #1個數字
[\d]{6} : 073216 #6個數字
前方多一個r可避免錯誤,此範例無差
月份01 02 … 09 10 11 12
月份的第一個數字不是0就是1 [01]
日期01 02 … 09 10 11… 20 21…30 31
日期的第一個數字
只有可能0 1 2 3 [0123]
#re寫得對不對,
(直接按網站的複製鈕,反而前後會多贅字):
“””
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20220901162035_16-1200x384.png)
正則表示法
[ ]內可以放兩類以上
但目前只放\d一類
有沒有[ ] 都沒差
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20230525163253_57.png)
match = re.search(pattn,text).group()
print(match)
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20220901154435_19.png)
本來希望if match != None
append進去list
但是None.group()會直接報錯:
AttributeError: ‘NoneType’ object has no attribute ‘group’
應該這樣寫:
time= ['Amplitude', '', 'Test Time', \
'2022/08/30 073216', '2022/08/30 073233',\
'2022/08/30 073250', '2022/08/30 073307',\
'2022/08/30 073324', '', 'Phase', '', 'Test Time',\
'2022/08/30 073216', '2022/08/30 073233', \
'2022/08/30 073250', '2022/08/30 073307',\
'2022/08/30 073324']
import re
#text = 'Amp'
#fmt = r"????/??/?? ??????" #這個不行
#pattn = "[\d]{4}/[01][\d]/[0123][\d] [\d]{6}"
pattn = "[\d]{4}\/[01][\d]\/[0123][\d] [\d]{6}"
timeNew = []
for t in time:
text = t
match = re.search(pattn,text)
if match != None:
timeNew.append(match.group())
#沒有.group() 回傳位置,若未搜尋到,回傳None
#有 .group()回傳搜尋到的內容
print(timeNew)
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20220901164427_9-1200x482.png)
re這樣寫比較好理解一點:
[\d]{4}\/[\d]{2}\/[\d]{2} [\d]{6}
\/表示要搜尋/
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20220902080445_45-1200x386.png)
Match a single character present in the list below
Match a single character present in the list below
Match a single character present in the list below
Match a single character present in the list below
Global pattern flags
用findall做也可以
改成match != [] (原本是match != None)
time= ['Amplitude', '', 'Test Time', \
'2022/08/30 073216', '2022/08/30 073233',\
'2022/08/30 073250', '2022/08/30 073307',\
'2022/08/30 073324', '',\
'Phase', '', 'Test Time',\
'2022/08/30 073216', '2022/08/30 073233', \
'2022/08/30 073250', '2022/08/30 073307',\
'2022/08/30 073324']
import re
#text = 'Amp'
#fmt = r"????/??/?? ??????" #這個不行
#pattn = "[\d]{4}/[01][\d]/[0123][\d] [\d]{6}"
pattn = "[\d]{4}\/[01][\d]\/[0123][\d] [\d]{6}"
comp = re.compile(pattn,flags=0)
timeNew = []
for t in time:
text = t
match = re.findall(pattn,text)
if match != []:
timeNew.append(match)
print(timeNew)
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20220902092555_29.png)
findall回傳的是list
但我們只要string:
[item[0] for item in timeNew]
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20230525151701_98.png)
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20220902135606_38.png)
輸出結果:
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20220902135723_80.png)
“””
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20221129090139_37.png)
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20221129085956_9.png)
在正则表达式中,方括号 [] 用于创建一个字符类(character class)或字符集合。
它指示正则表达式匹配方括号中的任何一个字符。
在字符类中,您可以列出要匹配的字符,或者使用特殊的字符类别简化模式。下面是一些常见的用法:
-
列出字符:例如,
[abc]匹配字符 “a”、”b” 或 “c”。 -
字符范围:您可以使用连字符
-来指定一个字符范围。例如,[a-z]匹配从小写字母 “a” 到 “z” 的任何字符。 -
反转字符类:您可以在字符类的开头使用
^符号来反转匹配。例如,[^0-9]匹配任何非数字字符。 -
字符类简写:正则表达式提供了一些常用字符类别的简写形式。例如,
\d表示数字字符,\w表示任何字母数字字符及下划线_,它等效于字符类[a-zA-Z0-9_],\s表示空白字符(包括空格、制表符等)。 -
组合使用:您可以组合多个字符类和其他正则表达式元素以创建更复杂的模式。例如,
[a-zA-Z0-9]匹配任何字母或数字字符。
\、- 等)可能需要进行转义,具体取决于所使用的正则表达式引擎和上下文。
![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20230525144355_55.png)
-
\.: 这表示匹配一个点字符(.)。在正则表达式中,.通常表示匹配除换行符外的任意字符。但是在这里,我们使用反斜杠进行转义,以匹配字面上的点字符。 -
(?!\d): 这是一个负向前瞻断言(negative lookahead assertion)。它在匹配点字符后的位置进行检查,以确保后面不跟着一个数字。在这里,\d表示匹配任意一个数字字符(0-9)。因此,(?!\d)表示断言后面不跟着一个数字字符。
综合起来,正则表达式 \.(?!\d) 的含义是匹配一个点字符,并且后面不跟着一个数字字符。在文件名的上下文中,这样的正则表达式可以用来在文件扩展名的点字符处进行分割,而不会将包含小数点的数字分割开。
在正则表达式中,(?!...) 是一个负向前瞻断言(negative lookahead assertion),它用于限定匹配位置后面的内容。它断言括号内的模式在当前位置后面不出现。
这意味着 (?!...) 并不直接表示 “不等于” 的含义。它只是一个用于限制匹配的断言,用来排除某些模式的出现。
例如,正则表达式 apple(?!pie) 匹配 “apple”,但不匹配 “applepie”,因为断言后面不应该跟着 “pie”。
所以,(?!...) 在正则表达式中是用于限制匹配位置后面内容的模式。它并不直接表示 “不等于” 的含义,而是用来排除某些模式的出现
( ) 和 [ ] 在正则表达式中确实都涉及分组的概念,但它们的用途和含义略有不同。
-
捕获组
( ):( )用于创建一个捕获组,它可以将匹配的内容分组,并在后续的正则表达式中进行引用。- 捕获组可以用于提取特定部分的文本或进行后续处理。
- 捕获组会记住它所匹配的内容,可以在后续的表达式中使用特殊字符
\1、\2等引用捕获到的内容。
例如,正则表达式
(ab)+匹配连续出现的 “ab” 字符串,并将每个匹配的部分作为捕获组。 在字符串 “ababab” 中,整个正则表达式的匹配结果是 “ababab”,而捕获组的匹配结果是 “ab”。![Python: Regular Expression 正規表示法 正則表達式 import re ; pattn = "[d]{4}/[01][d]/[0123][d] [d]{6}" ; match = re .search (pattn,text) .group() - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/09/20230525161659_63.png)
-
字符类
[ ]:[ ]用于创建一个字符类(character class)或字符集合,指示正则表达式匹配方括号中的任何一个字符。- 字符类可以列出要匹配的字符,或使用特殊字符类别简化模式。
- 字符类匹配单个字符,而不是整个字符串或子字符串。
例如,正则表达式
[abc]匹配字符 “a”、”b” 或 “c”。 在字符串 “abc” 中,正则表达式的匹配结果是 “a”。
总结:
( )用于创建捕获组,用于分组和引用匹配内容。[ ]用于创建字符类,用于指定匹配的字符集合。
虽然它们都有分组的概念,但 ( ) 更关注于匹配内容的分组和引用,而 [ ] 更关注于字符匹配的集合。
推薦hahow線上學習python: https://igrape.net/30afN


![Python: pandas.DataFrame (df) 的取值: df [單一字串] 或df [list_of_strings] 選取一個或多個columns; df [切片] 或 df [bool_Series] 選取多個rows #bool_Series長度同rows, index也需要同df.index ,可以使用.equals() 確認: df.index.equals(mask.index) Python: pandas.DataFrame (df) 的取值: df [單一字串] 或df [list_of_strings] 選取一個或多個columns; df [切片] 或 df [bool_Series] 選取多個rows #bool_Series長度同rows, index也需要同df.index ,可以使用.equals() 確認: df.index.equals(mask.index)](https://i2.wp.com/savingking.com.tw/wp-content/uploads/2025/04/20250420212553_0_6fb2c3.png?quality=90&zoom=2&ssl=1&resize=350%2C233)







近期留言