如何使用pythonic方式(一个衬垫)在多个图案上分割字符串?

时间:2018-01-15 05:20:35

标签: python

我试图从没有扩展名的文件指针中提取文件名。我的文件名如下:

this site:time.listthis.listthis site:time_sec.listthat site:time_sec.list等等。此处所需的文件名始终位于空格或点之前。

目前我这样做是为了从文件名前面的空格和文件名中的点来获取文件。

search_term = os.path.basename(f.name).split(" ")[0]

search_term = os.path.basename(f.name).split(".")[0]

预期的文件名输出:thisthisthisthat

我如何将上述两种组合成一种线性和pythonic方式?

提前致谢。

3 个答案:

答案 0 :(得分:2)

使用如下的正则表达式, [ .]将分隔为空格或点字符

re.split('[ .]', os.path.basename(f.name))[0]

答案 1 :(得分:1)

如果你拆分一个并且拆分另一个仍然返回更小的东西,那就是你想要的那个。如果没有,你得到的是你从第一次拆分中得到的。你不需要正则表达式。

search_term = os.path.basename(f.name).split(" ")[0].split(".")[0]

答案 2 :(得分:0)

使用正则表达式获取字符串开头的第一个单词:

import re

re.match(r"\w+", "this site:time_sec.list").group()
# 'this'

re.match(r"\w+", "this site:time.list").group()
# 'this'

re.match(r"\w+", "that site:time_sec.list").group()
# 'that'

re.match(r"\w+", "this.list").group()
# 'this'

试试这个:

pattern = re.compile(r"\w+")
pattern.match(os.path.basename(f.name)).group()

当你依赖于一个空格分隔你要从其余部分提取的内容时,确保你的文件名里面没有空格。如果您依赖于这样的隐式规则而不是实际查看要提取的字符串并定制显式表达式以适合内容,那么您更有可能获得意想不到的结果,而不是提前考虑。