多个换行符上的Python正则表达式

时间:2015-06-30 05:35:08

标签: python regex newline

我有一个字符串,其中包含多个文件路径,其中一些路径中包含任意换行符,我想使用python解析字符串,以便只保留文件名和扩展名。

例如:

a/b/c/d/file1.c  
a/b/c/d/e/f/g/h/1/2/3/4/5/foo.c  
dir1/dir2/newlinedir  
/nextlinedir/bar.c
应该解析

以提供输出:

  

file1.c中
  foo.c的
  bar.c

我正在使用以下正则表达式(文件名和扩展名的组必须分开才能用于以后目的):

path_regex = re.compile(r'.*\/([^\/\.]*)(\.c){0,1}$', re.MULTILINE)
path_regex.sub(r'\g<1>\g<2>', input_string)

这适用于具有单行路径的字符串,但不适用于包含换行符的路径。 我该怎么办?

5 个答案:

答案 0 :(得分:1)

试试这个正则表达式:(?:.*\/)(.+)\.(.+)

使用\ 1访问文件名,使用\ 2访问扩展名

DEMO

答案 1 :(得分:1)

你可以试试这个,

>>> s = '''a/b/c/d/file1.c  
a/b/c/d/e/f/g/h/1/2/3/4/5/foo.c  
dir1/dir2/newlinedir  
/nextlinedir/bar.c'''
>>> print(re.sub(r'(?s).*?([^/]+\.c)', r'\1\n', s))
file1.c
foo.c
bar.c

>>> print(re.sub(r'(?s).*?([^/]+)(\.[^.\n]+)(?=$|\n)', r'\1\2\n', s))
file1.c  
foo.c  
bar.c

答案 2 :(得分:1)

^([\s\S]*?\/)(\w+\.c)

试试这个。看看演示。这也会有效multiline。使用mmultiline标记。

https://regex101.com/r/rX1tE6/7

答案 3 :(得分:0)

这个简单的正则表达式也有效,您可以使用\ 1

访问带扩展名的文件名
([^/]*\.\w+)

答案 4 :(得分:0)

这在技术上并不是你要求的,但是这里的正则表达式可能不是正确的工具,因为now you have two problems

我认为这就是你要找的东西:

pydoc os.path.basename

所以试试这个:

map(os.path.basename, text.split('\n'))