0

我正在尝试使用 re 模块解决正则表达式识别问题。我想从文件中复制一些以 * 开头的行,确切的行模式是:

*7  3   279 0

在字符中有制表符。我与这些行匹配的正则表达式是:

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

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

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

4

4 回答 4

2

您没有使用正则表达式捕获行的全部内容,您只会匹配以下类型的行:

*7

类似的东西^\*(?:\d+\s+)+$应该可以工作,不需要多行,因为您将正则表达式应用于文件的每一行。

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

于 2013-02-14T17:00:32.100 回答
1

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

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,你会这样做。查看文档

于 2013-02-14T17:14:39.963 回答
0

试试这个:

 re.compile(r'^\*\d\s+\d+\s+')
于 2013-02-14T17:00:34.263 回答
0

不知道python,但似乎正则表达式应该是这个^[*][\d(\s)*]+$

于 2013-02-14T17:01:50.630 回答