Python重新模式匹配

时间:2013-02-14 16:55:46

标签: python regex

我正在尝试使用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 个答案:

答案 0 :(得分:2)

你没有用正则表达式捕获整行,你只能匹配类型的行:

*7

^\*(?:\d+\s+)+$这样的东西应该有效,不需要多行,因为你正在将正则表达式应用到文件的每一行。

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

答案 1 :(得分: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 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

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