[英]make regex in Python
如何在Python中為此制作一個正則表達式?
[1,12:12] call basic_while1() Error Code: 1046. No database selected
我試過這個'^\\[(\\d+),([0-9:]+)\\]\\s+(.+)$'
但是這種輸入沒有任何匹配: ['1','12:12', 'call basic_while1()' ,'Error Code: 1046. No database selected'
]使用該正則表達式。
如果我想獲得類似
['Error Code: 1046. No database selected']
輸出,則是正則表達式是什么?
如何為此做一個正則表達式,以便我可以匹配?
在這里,我做一個(充滿風險的)假設,即您的文本中總會有子字符串Error Code
。 因此,我將您的正則表達式修改為'^\\[(\\d+),([0-9:]+)\\]\\s+(.+)\\s+(Error\\sCode:.+)$'
。 在shell中運行:
>>> import re
>>> text = '[1,12:12] call basic_while1() Error Code: 1046. No database selected'
('1', '12:12', 'call basic_while1() Error Code: 1046. No database selected')
>>> re.match('^\[(\d+),([0-9:]+)\]\s+(.+)\s+(Error\sCode:.+)$', text)
<re.Match object; span=(0, 68), match='[1,12:12] call basic_while1() Error Code: 1046. N>
>>> _.groups()
('1', '12:12', 'call basic_while1()', 'Error Code: 1046. No database selected')
如果您想要一個列表,只需使用類型轉換。
>>> list(_)
['1', '12:12', 'call basic_while1()', 'Error Code: 1046. No database selected']
旁注:上面命令中的_
是告訴Python Shell重用先前結果的快捷方式(在這種情況下,是re.Match
對象,然后是groups()
結果)。
共:
matches = re.match('^\[(\d+),([0-9:]+)\]\s+(.+)\s+(Error\sCode:.+)$', text)
if matches is not None: # if there is no match, re.match returns None
print(list(matches.groups()))
如果我想獲得類似
['Error Code: 1046. No database selected']
輸出,則是正則表達式是什么?
您可以簡單地使用[-1]
為列表的最后一個元素建立索引,然后用方括號將其包裝成一個列表。
print([matches.groups()[-1]]) # output => ['Error Code: 1046. No database selected']
您要匹配3個捕獲組,並且需要第四個()
在()
之后()
。 在[結束]
之后,您可以添加一個非貪心匹配項以進行匹配,直到開始和結束括號:
^\\[(\\d+),(\\d+:\\d+)\\]\\s+(.*?\\(\\))\\s+(.*)
那將匹配:
^
字符串的開頭 \\[
匹配[
(\\d+)
捕獲一組1個以上的數字 ,(\\d+:\\d+)
匹配逗號並捕獲一組1+位數字,后跟冒號和1+位數字。 (或[0-9:]+
但這將是更廣泛的匹配) \\s+
匹配1+個空格字符 (.*?\\(\\))
分組捕獲0+次非貪婪的任意字符,然后匹配()
\\s+(.*)
匹配1+個空白字符,並捕獲任意字符0+次
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.