簡體   English   中英

如何在python中使用正則表達式獲取結束字符串?

[英]How to get a end string using regex in python?

我有一些字符串,我在上一個問題中已經提到過

s = "[1,12:12] call basic_while1() Error Code: 1046. No database selected"

s1="[1,12:12] call add() Asdfjgg Error Code: 1046. No database aa selected"

s2= "[1,12:12] call add()"

s3= "[1,12:12]"

s4="Error Code: 1046. No database selected"

s5="END: Error Code: 2134. database doen't exist"

regex=(?:^\[(\d+),(\s?[0-9:]+)\](?:\s+(.+?)\s?)?(?:Error Code:.*)?$)|(?:()()()(Error Code:.*$))

使用該正則表達式,我得到的輸出如下

['1', '12:12', 'call basic_while1()']
['1', '12:12', 'call add() Asdfjgg']
['1', '12:12', 'call add()']
['1', '12:12']
['', '', '', 'Error Code: 1046. No database selected']

現在我只想改變那個正則表達式,然后像

['', '', '','Error Code: 1046. No database selected']
['', '', '','Error Code: 1046. No database selected']
['', '', '']
['', '']
['Error Code: 1046. No database selected']

我修改了這個

(?:^\?:[(\d+),(\s?[0-9:]+)\](?:\s+(.+?)\s?$)?(Error Code:.*))|(?:()()()(Error Code:.*$))  

但它不起作用是否可以使用該正則表達式獲得這樣的輸出?

試試

regex='Error Code: \d+.*'
match = re.search(regex, s)
if match:
    print(match.group(0))
    # Output:
    # 'Error Code: 1046. No database selected'

你可以用

^
(?:\[(?P<d1>[\d,]+):(?P<d2>[\d,]+)\]\ ?)?
(?:(?P<code>(?:(?!Error\ Code).)*))?
(?P<error>Error\ Code:.+)?

在詳細模式下,請參閱regex101.com 上的演示


分解這說:

 ^ # start of the line (?: # non-capturing group \\[ # [ (?P<d1>[\\d,]+): # digits and commas -> group "d1", followed by : (?P<d2>[\\d,]+) # group "d2 \\]\\ ? # make the space optional )? # make the whole group optional (?: (?P<code> (?:(?!Error\\ Code).)*) # everything until "Error Code" )? (?P<error>Error\\ Code:.+)? # Error Code and anything that follows


Python這可能是:

 import re rx = re.compile(r"""...above expression...""", re.M | re.X) for m in rx.finditer(string): print(m.group('error')) # or any other group

有關整個代碼段,請參閱ideone.com 上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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