Python正则表达式“无可厚非”
问题内容:
这是一个正则表达式-由egrep和Python 2.7尝试:
$ echo’/some/path/to/file/abcde.csv’| egrep’*([(a-zA-Z] +)。csv’
/ some / path / to / file / abcde.csv
但是,Python中的同一个正则表达式:
re.match(r'*([a-zA-Z]+)\.csv',f )
给出:
Traceback (most recent call last):
File "/shared/OpenChai/bin/plothost.py", line 26, in <module>
hosts = [re.match(r'*([a-zA-Z]+)\.csv',f ).group(1) for f in infiles]
File "/usr/lib/python2.7/re.py", line 141, in match
return _compile(pattern, flags).match(string)
File "/usr/lib/python2.7/re.py", line 251, in _compile
raise error, v # invalid expression
sre_constants.error: nothing to repeat
进行搜索后发现,这里似乎有一个Python错误:
这似乎是一个python错误(在vim中完美运行)。问题的根源是(\ s * …)+位。
但是,我不清楚:上面显示的我的正则表达式的解决方法是什么-使 python 幸福?
谢谢。
问题答案:
您不需要*
模式中的,它会导致问题。
采用
([a-zA-Z]+)\.csv
或匹配整个字符串:
.*([a-zA-Z]+)\.csv
观看演示
原因是*
未转义,因此被视为量词。它应用于正则表达式中的前一个子模式。在此,它用于模式的开头,因此无法量化。因此, 不会重复任何内容 。
如果“作品”中VIM,它仅仅是因为VIM正则表达式引擎忽略这个子模式(等同于Java那样使用转义[
和]
字符类内等[([)]]
)。