【发布时间】:2015-10-01 21:43:43
【问题描述】:
这是一个正则表达式 - 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 错误:
regex error - nothing to repeat
这似乎是一个 python 错误(在 vim 中完美运行)。来源 问题的关键在于 (\s*...)+ 位。
但是,我并不清楚:那么上面显示的正则表达式的解决方法是什么 - 让 python 开心?
谢谢。
【问题讨论】:
-
你试过
.*或.*?吗? -
这不是 python 错误;你有一个
*(意思是“前一个字符重复 0 次或更多次”)没有前一个字符。 -
*在正则表达式中的意思是0 or more of the previous所以你抱怨的是一个错误根本不是一个错误。你想让*匹配什么?