PYTHON REGEX从字符串中搜索所有.sql文件名

时间:2018-10-17 11:12:02

标签: regex python-3.x

我正在编写一个代码,以检查Git Repo并找出上次(最近一次)提交后更改了哪些文件。这些是.sql文件。我得到的输出为Follows

b'commit 7cc9c8ac247f2c139c37081aef091b78c6d51011\nAuthor: blahblah <blahblah@gmail.com>\nDate:   Wed Oct 17 18:46:37 2018 +0800\n\n    test subprocess output\n\n:000000 100644 0000000... e69de29... A\t123.sql\n:000000 100644 0000000... 617f0a5... A\tabc.sql\n:000000 100644 0000000... e69de29... A\ttestFile1\n:000000 100644 0000000... e69de29... A\txyz.sql\n' 

现在,我陷入了正则表达式中,无法从字符串中提取文件名。我可以使用多次拆分来提取这些文件名,但这将是不好的,并且会不必要地使我的代码复杂化。因此,我想使用re.findall,因为它会提供一系列我必须处理的文件名。

此处,预期输出为

['123.sql','abc.sql','xyz.sql']

需要有关正则表达式模式的帮助。

示例代码示例:

import re
files = b'commit 7cc9c8ac247f2c139c37081aef091b78c6d51011\nAuthor: blahblah <blahblah@gmail.com>\nDate:   Wed Oct 17 18:46:37 2018 +0800\n\n    test subprocess output\n\n:000000 100644 0000000... e69de29... A\t123.sql\n:000000 100644 0000000... 617f0a5... A\tabc.sqlt\n:000000 100644 0000000... e69de29... A\ttestFile1\n:000000 100644 0000000... e69de29... A\txyz.sql\n'
  

regex =“需要帮助”

files = re.findall(regex, files.decode('utf-8'))

3 个答案:

答案 0 :(得分:1)

您可以匹配一个或多个单词char,后跟.sql子字符串,但是由于files是字节字符串,因此您还应该在字符串文字前加上{{1 }}:

b

详细信息

  • re.findall(rb'\w+\.sql', files) ^ ^^^^^^^^ -1个或多个字母,数字,\w+字符
  • _-一个点
  • \.-一个sql子字符串。

请参见Python demo

sql

输出:

import re
files = b'commit 7cc9c8ac247f2c139c37081aef091b78c6d51011\nAuthor: blahblah <blahblah@gmail.com>\nDate:   Wed Oct 17 18:46:37 2018 +0800\n\n    test subprocess output\n\n:000000 100644 0000000... e69de29... A\t123.sql\n:000000 100644 0000000... 617f0a5... A\tabc.sqlt\n:000000 100644 0000000... e69de29... A\ttestFile1\n:000000 100644 0000000... e69de29... A\txyz.sql\n'
print(re.findall(rb'\w+\.sql', files))

答案 1 :(得分:0)

为什么不只在以.sql结尾并由制表符分隔的行的末尾查找所有“单词”?

re = re.compile(r'\t(\w+\.sql)$')

如果您的“ SQL文件名”包含空格或其他怪异的东西,则必须分析完整的行,但是似乎像上面的我这样的更简单的方法应该很容易理解,并且可以使您达到大多数。 / p>

答案 2 :(得分:0)

此代码将为您提供帮助吗?

import re
files = "b'commit 7cc9c8ac247f2c139c37081aef091b78c6d51011\nAuthor: blahblah <blahblah@gmail.com>\nDate:   Wed Oct 17 18:46:37 2018 +0800\n\n    test subprocess output\n\n:000000 100644 0000000... e69de29... A\t123.sql\n:000000 100644 0000000... 617f0a5... A\abc.sqlt\n:000000 100644 0000000... e69de29... A\ttestFile1\n:000000 100644 0000000... e69de29... A\txyz.sql\n'"

regex=r"(\w+.sql)"

result = re.findall(regex, str(files), re.M)

print(result)

输出:

['123.sql', 'bc.sql', 'xyz.sql']