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