簡體   English   中英

在Python中制作正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM