我对python很新,但是我试图编写一个程序,根据句子的开头和结尾从字符串中捕获句子。
例如,如果我的字符串是
description = "11:26:16 ENTRY 'Insert Imaginative Description of a person' 11:29:17 EXIT 'Insert The Description of the Same Person'"
我知道如何使用正则表达式来检测日期戳和单词条目。我使用:
re.search(r'\d{2}:\d{2}:\d{2} ENTRY', description)
当然会告诉我那个位置有一个条目,但是如何让正则表达式捕获日期戳,条目和后面的句子,但是省略了EXIT日志?
答案 0 :(得分:0)
你可以试试这个。
re.search(r'\b(\d{2}:\d{2}:\d{2}(?:\.\d{3})?) ENTRY', description)
如果您想进行全局匹配,请使用re.findall
,因为re.search
只会返回第一个匹配项。
示例:强>
>>> import re
>>> description = "11:26:16 ENTRY 'Insert Imaginative Description of a person' 11:29:17 EXIT 'Insert The Description of the Same Person'"
>>> re.search(r'\b(\d{2}:\d{2}:\d{2}(?:\.\d{3})?) ENTRY', description).group(1)
'11:26:16'
要在ENTRY
之后获取日志。
>>> re.search(r"\b(\d{2}:\d{2}:\d{2}(?:\.\d{3})?) ENTRY '([^']*)'", description).group(1)
'11:26:16'
>>> re.search(r"\b(\d{2}:\d{2}:\d{2}(?:\.\d{3})?) ENTRY '([^']*)'", description).group(2)
'Insert Imaginative Description of a person'
>>> re.search(r"\b(\d{2}:\d{2}:\d{2}(?:\.\d{3})?) ENTRY '([^']*)'", description).group()
"11:26:16 ENTRY 'Insert Imaginative Description of a person'"
答案 1 :(得分:0)
在要匹配的模式周围添加括号()以获取为其返回的组,而且您的模式实际上与您的示例不匹配 - 模式需要a。和三位数。你可以像这样选择这些:
match = re.search(r'(\d{2}:\d{2}:\d{2}(\.\d{3})?) ENTRY', description)
if match:
print match.group(1)
要捕获句子,请像这样扩展模式:
match = re.search(r'(\d{2}:\d{2}:\d{2}(\.\d{3})?) ENTRY \'([^\']+)\'', description)
if match:
print match.group(1), match.group(3)
注意句子在第3组中,因为选项三位数是第2组。 输出是:
11:26:16 Insert Imaginative Description of a person
因为模式必须与句子周围的''匹配,所以这些模式前面加上反斜杠。另一种方法是在整个模式周围使用“”,在这种情况下,'不需要在它们之前使用反斜杠。