Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么是"\";匹配的正则表达式模式结果中出现的字符?_Python_Regex_Python 3.x - Fatal编程技术网

Python 为什么是"\";匹配的正则表达式模式结果中出现的字符?

Python 为什么是"\";匹配的正则表达式模式结果中出现的字符?,python,regex,python-3.x,Python,Regex,Python 3.x,我试图解析日志文件并提取某些捕获组,如时间戳、用户名等。当我执行以下代码时,结果是一个列表元素,其中嵌套了元组作为捕获组(或搜索结果)。基本上,我很好奇为什么在我的一个捕获组中有一个“\n”字符,我不想在那里看到这个 我尝试修补正则表达式模式,但无法解决问题 import re with open('obis1-query.log') as myfile: StartTime = [] myfile = myfile.read() mysearch = re.fin

我试图解析日志文件并提取某些捕获组,如时间戳、用户名等。当我执行以下代码时,结果是一个列表元素,其中嵌套了元组作为捕获组(或搜索结果)。基本上,我很好奇为什么在我的一个捕获组中有一个“\n”字符,我不想在那里看到这个

我尝试修补正则表达式模式,但无法解决问题

import re

with open('obis1-query.log') as myfile:  
    StartTime = []
    myfile = myfile.read()
    mysearch = re.findall('(?P<datetime>\d+-\d+-\d+T\d+:\d+:\d+.\d+-05:00).\s.\w+.\s.\w+:\d.\s.+ecid:\s[A-Za-z\d,:-]+.\s.sik:\s\w+.\s.tid:\s\w+.\s.messageid:\s\w+-\d+.\s.requestid:\s\w+.\s.(?P<sessionid>sessionid:\s\w+).\s.(?P<username>username:\s\w+).\s#+\s\[\[\s-+\sSQL\sRequest,\s(?P<logreqhash>logical\srequest\shash:\n?\w+)', myfile)

if mysearch != None:        
    StartTime.append(mysearch)  
    print(StartTime)

我只想从结果中删除介于“逻辑请求哈希:”和“以下数字”(在最后一种情况下为4496de01)之间的“\n”字符。

考虑将
\n
字符删除为
。替换(“\n”,”)
考虑将
\n
字符删除为
。替换(“\n”,”)

您正在将整个文件读入一个字符串,然后搜索该字符串。文件(因此字符串)包含正在匹配的“\n”实例

考虑使用

for line in myfile.readlines():
    # Search line for regex
一次只解析一行,这样就不需要换行符。

您将整个文件读入一个字符串,然后搜索该字符串。文件(因此字符串)包含正在匹配的“\n”实例

考虑使用

for line in myfile.readlines():
    # Search line for regex

一次只解析一行,这必然会忽略换行符。

预期的输出是什么样子的?结果中会出现
\n
,因为您的匹配模式包含它:
哈希:\n?\w+
@JohnGordon它应该匹配换行符(换行符)字符,不是文字字符。@Travis您能解释一下新行和
\n
之间的区别吗?我的意思是,您似乎有输出,您可能可以在输出中隔离包含所讨论的
\n
字符的字符串。通过
print()
运行它,看看会发生什么。如果它以两行打印,那么它确实是一个换行。@MichaelEkoka我要做的就是从第四个捕获组的打印输出中删除\n。在我正在分析的日志文件中,格式如下:--------------SQL请求,逻辑请求哈希:83bf7e6f\n,因为您的匹配模式包含它:
哈希:\n?\w+
@JohnGordon它应该匹配换行符(换行符)字符,而不是文字字符。@Travis你能解释一下换行符和
\n
之间的区别吗?我的意思是,你似乎有输出,你可能可以在输出中分离出包含有问题的
\n
字符的字符串。通过
print()运行它
然后看看会发生什么。如果它打印成两行,那么它确实是一个换行。@MichaelEkoka我所要做的就是从第四个捕获组的打印输出中删除\n。在我正在分析的日志文件中,格式如下所示:---------------SQL请求,逻辑请求哈希:83bf7e6f“逻辑请求哈希:\n4496de01”,因为它的一部分位于不同的行上…这将无法捕获
“逻辑请求哈希:\n4496de01”
因为它的一部分在不同的行上……当捕获组的结果是元组时,我不能使用str方法。当捕获组的结果是元组时,我不能使用str方法。