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寫得對不對,
(直接按網站的複製鈕,反而前後會多贅字):
“””
正則表示法
[ ]內可以放兩類以上
但目前只放\d一類
有沒有[ ] 都沒差
match = re.search(pattn,text).group()
print(match)
本來希望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)
re這樣寫比較好理解一點:
[\d]{4}\/[\d]{2}\/[\d]{2} [\d]{6}
\/表示要搜尋/
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)
findall回傳的是list
但我們只要string:
[item[0] for item in timeNew]
輸出結果:
“””
在正则表达式中,方括号 []
用于创建一个字符类(character class)或字符集合。
它指示正则表达式匹配方括号中的任何一个字符。
在字符类中,您可以列出要匹配的字符,或者使用特殊的字符类别简化模式。下面是一些常见的用法:
-
列出字符:例如,
[abc]
匹配字符 “a”、”b” 或 “c”。 -
字符范围:您可以使用连字符
-
来指定一个字符范围。例如,[a-z]
匹配从小写字母 “a” 到 “z” 的任何字符。 -
反转字符类:您可以在字符类的开头使用
^
符号来反转匹配。例如,[^0-9]
匹配任何非数字字符。 -
字符类简写:正则表达式提供了一些常用字符类别的简写形式。例如,
\d
表示数字字符,\w
表示任何字母数字字符及下划线_
,它等效于字符类[a-zA-Z0-9_]
,\s
表示空白字符(包括空格、制表符等)。 -
组合使用:您可以组合多个字符类和其他正则表达式元素以创建更复杂的模式。例如,
[a-zA-Z0-9]
匹配任何字母或数字字符。
\
、-
等)可能需要进行转义,具体取决于所使用的正则表达式引擎和上下文。
-
\.
: 这表示匹配一个点字符(.
)。在正则表达式中,.
通常表示匹配除换行符外的任意字符。但是在这里,我们使用反斜杠进行转义,以匹配字面上的点字符。 -
(?!\d)
: 这是一个负向前瞻断言(negative lookahead assertion)。它在匹配点字符后的位置进行检查,以确保后面不跟着一个数字。在这里,\d
表示匹配任意一个数字字符(0-9)。因此,(?!\d)
表示断言后面不跟着一个数字字符。
综合起来,正则表达式 \.(?!\d)
的含义是匹配一个点字符,并且后面不跟着一个数字字符。在文件名的上下文中,这样的正则表达式可以用来在文件扩展名的点字符处进行分割,而不会将包含小数点的数字分割开。
在正则表达式中,(?!...)
是一个负向前瞻断言(negative lookahead assertion),它用于限定匹配位置后面的内容。它断言括号内的模式在当前位置后面不出现。
这意味着 (?!...)
并不直接表示 “不等于” 的含义。它只是一个用于限制匹配的断言,用来排除某些模式的出现。
例如,正则表达式 apple(?!pie)
匹配 “apple”,但不匹配 “applepie”,因为断言后面不应该跟着 “pie”。
所以,(?!...)
在正则表达式中是用于限制匹配位置后面内容的模式。它并不直接表示 “不等于” 的含义,而是用来排除某些模式的出现
( )
和 [ ]
在正则表达式中确实都涉及分组的概念,但它们的用途和含义略有不同。
-
捕获组
( )
:( )
用于创建一个捕获组,它可以将匹配的内容分组,并在后续的正则表达式中进行引用。- 捕获组可以用于提取特定部分的文本或进行后续处理。
- 捕获组会记住它所匹配的内容,可以在后续的表达式中使用特殊字符
\1
、\2
等引用捕获到的内容。
例如,正则表达式
(ab)+
匹配连续出现的 “ab” 字符串,并将每个匹配的部分作为捕获组。 在字符串 “ababab” 中,整个正则表达式的匹配结果是 “ababab”,而捕获组的匹配结果是 “ab”。 -
字符类
[ ]
:[ ]
用于创建一个字符类(character class)或字符集合,指示正则表达式匹配方括号中的任何一个字符。- 字符类可以列出要匹配的字符,或使用特殊字符类别简化模式。
- 字符类匹配单个字符,而不是整个字符串或子字符串。
例如,正则表达式
[abc]
匹配字符 “a”、”b” 或 “c”。 在字符串 “abc” 中,正则表达式的匹配结果是 “a”。
总结:
( )
用于创建捕获组,用于分组和引用匹配内容。[ ]
用于创建字符类,用于指定匹配的字符集合。
虽然它们都有分组的概念,但 ( )
更关注于匹配内容的分组和引用,而 [ ]
更关注于字符匹配的集合。
推薦hahow線上學習python: https://igrape.net/30afN