Python正则表达式到行尾

时间:2012-12-11 11:23:37

标签: python

有点沮丧,我无法解决这个问题,但我想定义一个正则表达式,选择一个未知数量的单词(一些间隔,一些包含数字,一些强调)。

当我说“未知数量的单词”时,我很乐意将其限制为10,如果这更加真实。 基本上我正在扫描文件名,并且不怀疑有超过10个单词,但是不必设置限制就好了。

我到目前为止最好的是:

tc = re.findall(r'FROM CLIP NAME:\s\s(\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*)', text)

其中'FROM CLIP NAME:\ s \ s'将位于每一行的开头。

我上面的尝试完全失败,因为\ s读取换行符和空格,因此也从下一行抓取数据。

2 个答案:

答案 0 :(得分:3)

FROM CLIP NAME:\s{2}([\w\s]*)$

您可以使用字符类来定义允许的字符(也可以是预定义的字符类,如\w\s)并接受任意数量的字符。这样你就不会真正关心它将包含什么。您也可以使用点.来匹配任何

尾随$将使正则表达式在结尾处要求结束。请注意,对于$的基于行的行为,您需要为正则表达式使用re.M标志,否则$将匹配字符串的结尾。

re.compile('FROM CLIP NAME:\s{2}([\w\s]*)$', re.M)

如果在您的情况下FROM CLIP NAME:是静态前缀,则不应使用正则表达式。正如eumiro所示,只需迭代这些行并删除前缀。

答案 1 :(得分:2)

如何不使用正则表达式?

检查一行是否以"FROM CLIP NAME: "开头,然后将此开头剪掉并返回字符串的其余部分:

title = "FROM CLIP NAME:  "
for line in lines:
    if line.startswith(title):
        tc = line[len(title):]

这会对行进行迭代,因此line始终只在换行符之前。

如果您没有行(或文件对象)列表,而是文本,请使用for line in text.splitline()