正则表达式在python中的句子

时间:2018-12-18 10:17:19

标签: python regex

  

我还有一个查询

     

这是两个句子

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

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

[1,12:12] call add()

[1,12:12]

Error Code: 1046. No database selected

现在我要获得这样的输出

['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']

  

我使用了这个r'^\[(\d+),(\s[0-9:]+)\]\s+(.+)这是我的主要正则表达式,然后根据我的关注我对其进行了修改,但它没有帮助

     

我想删除“错误代码”之前的所有内容

     

该怎么做?

2 个答案:

答案 0 :(得分:0)

如果您想在单个正则表达式中执行此操作,则该模式将显得有些笨拙:(?:^\[(\d+),(\s?[0-9:]+)\](?:\s+(.+?)\s?)?(?:Error Code:.*)?$)|(?:()()()(Error Code:.*$))

>>> s = """[1,12:12] call basic_while1() Error Code: 1046. No database selected
... [1,12:12] call add() Asdfjgg Error Code: 1046. No database selected
... [1,12:12] call add()
... [1,12:12]
... Error Code: 1046. No database selected"""
>>> pattern = re.compile(r'(?:^\[(\d+),(\s?[0-9:]+)\](?:\s+(.+?)\s?)?(?:Error Code:.*)?$)|(?:()()()(Error Code:.*$))')
>>> for line in s.split('\n'):
...     print(pattern.match(line).groups())
...
['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']

我是regex101.com的忠实粉丝,尝试以交互方式创建正则表达式。

答案 1 :(得分:0)

基本上,您要求获取“错误代码”之前的所有内容

  

我想删除“错误代码”之前的所有内容

因此很简单,请尝试:find = re.search('((.)+)(\sError Code)*',s)find.group(1)会给您'[1,12:12] call add() Asdfjgg',这正是您想要的。

如果在获得该字符串之后,您想要list来请求:

desired_list = find.group(1).replace('[','').replace(']','').replace(',',' ').split()