Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 检查for循环中多个正则表达式的字符串_Python_Regex_String - Fatal编程技术网

Python 检查for循环中多个正则表达式的字符串

Python 检查for循环中多个正则表达式的字符串,python,regex,string,Python,Regex,String,我正在为某人跟踪日志文件,它们是一团乱麻(没有换行符和分隔符)。所以我做了一些简单的正则表达式来整理日志。日志记录代码现在在一个列表中很好地分开,它们的字符串在一个子目录中附加到该列表中。如下所示: Dict [ 0 : [LOGCODE_53 : 'The string etc etc'] ] 因为这有点容易,所以我也打算直接添加一些日志识别。现在我可以匹配日志代码了,但问题是这些代码没有任何问题,而且不同的日志代码通常包含相同的输出字符串 因此,我编写了一些正则表达式匹配来检测日志

我正在为某人跟踪日志文件,它们是一团乱麻(没有换行符和分隔符)。所以我做了一些简单的正则表达式来整理日志。日志记录代码现在在一个列表中很好地分开,它们的字符串在一个子目录中附加到该列表中。如下所示:

Dict [
    0 : [LOGCODE_53 : 'The string etc etc']
]
因为这有点容易,所以我也打算直接添加一些日志识别。现在我可以匹配日志代码了,但问题是这些代码没有任何问题,而且不同的日志代码通常包含相同的输出字符串

因此,我编写了一些正则表达式匹配来检测日志的内容。我现在的问题是,;检测各种各样的字符串模式的智慧是什么?可能有大约110种不同类型的字符串,它们是如此不同,以至于不可能“超级匹配”它们。如何在一个字符串上运行~110个正则表达式,以找出该字符串的意图,从而在逻辑寄存器中对其进行索引

有点像;“使用此$STRING并测试此$LIST中的所有$REGEX,然后让我知道哪些$REGEX(索引)与该字符串匹配”

我的代码:

import re

# Open, Read-out and close; Log file
f = open('000000df.log', "rb")
text = f.read()
f.close()

matches = re.findall(r'00([a-zA-Z0-9]{2})::((?:(?!00[a-zA-Z0-9]{2}::).)+)', text)

print 'Matches: ' + str(len(matches))
print '=========================================================================================='

for match in matches:
    submatching = re.findall(r'(.*?)\'s (.*?) connected (.*?) with ZZZ device (.*?)\.', match[1])

    print match[0] + ' >>> ' + match[1]
    print match[0] + ' >>> ' + submatching[0][0] + ', ' + submatching[0][1] + ',',
    print submatching[0][2] + ', ' + submatching[0][3]

re.match
re.search
re.findall
返回
None
如果某个特定正则表达式不匹配,那么您可以迭代可能的正则表达式并测试它们:

tests = [
    re.compile(r'...'),
    re.compile(r'...'),
    re.compile(r'...'),
    re.compile(r'...')
]

for test in tests:
    matches = test.findall(your_string):

    if matches:
        print test, 'works'

那个代码块不是python。你能发布更多的字符串示例吗?@falmari它只是给出列表/dict结构的指示。我已经添加了代码。在匹配“submatching”的位置,我实际上想测试多个正则表达式匹配的字符串,看看哪个返回true。110种不同类型的单词是否来自英语?不,它们都是非常不同的日志,有时还包含技术数据。服务器和系统日志文件。是的,实际上这是我的问题:)。我只是想知道该方法是否有一些超级功能(可能更快?),因为它可能涉及10000个日志条目。但是我刚刚测试了200万个条目,只花了4秒钟,所以我不再担心这个问题了:P,谢谢:)@Allendar:确保事先
re.compile()
你的正则表达式。这会让事情变得更快。