Python正则表达式搜索在匹配时不给出任何内容

时间:2014-06-30 14:24:57

标签: python regex

所以我有......

regex = re.compile('\d{4,}:\s##(.*)##')
regex_search = regex.search(line.mesg)

        # This code is abbreviated. I go on to do things with
        # "result" in the try block but rather than junk up this 
        # post, here's the gist:
        try:
             result = regex_search.group(1)
        except AttributeError:
            print regex_search

示例' line.mesg'输入(line.mesg的4个独立实例):

##Loading task.## 
##BEEP (375,2)##
##Aisle One One Seven##;pp
##Good night.##

现在,根据pythex.org (click to see)的测试,我应该从中获得结果。然而,每次我执行该代码时,它都会出现异常,而print regex_search会打印出“无”#。

我不确定这里有什么问题,任何帮助都会受到赞赏。

编辑:我是个白痴 - 我正在测试的内容以及我实际投入的内容并不是同一件事。上面的正则表达式确实适用于我最初输入的内容(以及上面pythex链接中的内容),但实际上我在第二个代码块中输入的是regex.search。

TL; DR:不出所料,当你依靠数字来匹配你的正则表达式,然后那些数字不在那里时,正则表达式就不匹配。

2 个答案:

答案 0 :(得分:1)

啊,我看到了这个问题,如果您不再使用search,可以使用re.findall,如下例所示。

import re
line = '''(5/12/14 10:22:36 AM EDT) 34438: ##Loading task.## 
(5/12/14 10:22:52 AM EDT) 3094962: ##BEEP (375,2)##
(5/12/14 10:22:52 AM EDT) 3095975: ##Aisle One One Seven##;pp
(5/12/14 10:40:07 AM EDT) 4132712: ##Good night.##'''

regex = re.compile('\d{4,}:\s##(.*)##+')
regex_search = regex.findall(line)

try:
   for result in regex_search.groups():
      print result
except AttributeError:
   print regex_search

返回

['Loading task.', 'BEEP (375,2)', 'Aisle One One Seven', 'Good night.']

答案 1 :(得分:0)

似乎不正确:

  1. 结果应打印在try块中。
  2. 还有一个额外的":"在除了行。
  3. 我不知道你的line.mesg的确切输入格式,所以有可能出现问题。但是以下代码有效:

    import re
    
    line = '''\
    (5/12/14 10:22:36 AM EDT) 34438: ##Loading task.##
    (5/12/14 10:22:52 AM EDT) 3094962: ##BEEP (375,2)##
    (5/12/14 10:22:52 AM EDT) 3095975: ##Aisle One One Seven##;pp
    (5/12/14 10:40:07 AM EDT) 4132712: ##Good night.##
    '''
    
    regex = re.compile('\d{4,}:\s##(.*)##')
    for line_msg in line.split('\n'):
        regex_search = regex.search(line_msg)
    
        try:
            result = regex_search.group(1)
            print result       # result should be printed here
        except AttributeError: # remove the ":" after "except"
            print regex_search