Python正则表达式在字符串的开头和结尾提取子字符串

时间:2013-12-16 21:49:36

标签: python regex

我正在寻找一个将所有内容提取到第一个的正则表达式。 (句号)字符串,包括和之后的所有内容。 (周期)

例如:

my_file.10.4.5.6.csv
myfile2.56.3.9.txt

理想情况下,针对这些字符串运行的正则表达式将返回:

my_file.csv 
myfile2.txt

每次运行脚本时,文件中的数字标记都会有所不同,所以我基本上想要排除它。

以下打印出第一个字符串。 (周期)

print re.search("^[^.]*", data_file).group(0)

我遇到了麻烦,虽然让它也返回最后一个句号和字符串。

很抱歉只是根据以下反馈和评论对此进行更新:

这确实需要是一个正则表达式。正则表达式将从配置文件传递到程序中。用户将无法访问源代码,因为它将被打包。 用户可能需要根据某些任意标准更改正则表达式,因此他们需要更新配置文件,而不是编辑应用程序并重新构建包。

由于

4 个答案:

答案 0 :(得分:4)

您不需要正则表达式!

parts = data_file.split(".")
print parts[0] + "." + parts[-1]

答案 1 :(得分:3)

我建议使用str.split而不是正则表达式。例如:

>>> data_file = 'my_file.10.4.5.6.csv'
>>> parts = data_file.split('.')
>>> print parts[0] + '.' + parts[-1]
my_file.csv

但是如果你坚持正则表达式,这里有一种方法:

>>> print re.sub(r'\..*\.', '.', data_file)
my_file.csv

答案 2 :(得分:0)

你需要一个正则表达式吗?

>>> address = "my_file.10.4.5.6.csv"
>>> split_by_periods = address.split(".")
>>> "{}.{}".format(address[0], address[-1])
>>> "my_file.csv"

答案 3 :(得分:0)

您不需要正则表达式。

tokens = expanded_name.split('.')
compressed_name = '.'.join((tokens[0], tokens[-1]))

如果您担心性能问题,可以使用长度限制rsplit()来尽可能多地删除字符串。

compressed_name = expanded_name.split('.', 1)[0] + '.' + expanded_name.rsplit('.', 1)[1]