2013-02-14 65 views
0

我想解决一个使用re模块识别正则表达式的问题。 我想*复制一些行开始从一个文件,确切的行模式是:Python重新匹配模式

*7 3 279 0 

,并有标签的人物之一。 我正则表达式来匹配线是:

regex=re.compile(r'^\*\d+.\n', re.MULTILINE) 
for line in f: 
    if regexp.match(line) 
    print >> a, line 

我写了创建文件“一”,但它是空的,它无法识别的模式的脚本。 你有什么建议吗?

此外,你能解释一下双引号和单引号的模式之间的区别吗?我在几个Python手册中搜索,但我没有找到任何信息。

+1

在Python中,单引号和双引号字符串没有区别。 – millimoose 2013-02-14 16:58:41

+1

此外,如果您正在逐行处理输入文件,它似乎并不需要多行匹配。使用常规匹配,并尝试搜索'$'而不是'\ n'? – millimoose 2013-02-14 17:00:01

回答

1

假设你只在一行的开头寻找* +号,您只需要这样做:

regex=re.compile(r'\*\d+') 
for line in f: 
    if regexp.match(line) 
    print >> a, line 

如果你愿意用空格分隔找到号码的数量:

regex=re.compile(r'\*(?:\d+\s+){3}\d+') 
for line in f: 
    if regexp.match(line) 
    print >> a, line 

如果您使用re.match,则不需要^定位点。如果您使用re.search,那么。 See the docs

2

你没有捕捉你的正则表达式行的全部,则只能将匹配类型的线路:

*7

喜欢的东西^\*(?:\d+\s+)+$应该工作,没有必要多,因为你”重新应用正则表达式到文件的每一行。

编辑: 更改为非捕获组,因为它不是必需的。

0

试试这个:

re.compile(r'^\*\d\s+\d+\s+') 
0

不知道蟒蛇,但它似乎正则表达式sgould是这个^[*][\d(\s)*]+$