在Python中正确使用regexp语法

时间:2013-03-25 19:09:48

标签: python regex

我正在使用正则表达式来查找由连字符分隔的8位数表示的任何和所有模式,如下所示:

(\d{8}\-\d{8}\)

我把它放在rubular.com(在线正则表达式编辑器)中,似乎工作正常。但是,当我在我的Python代码中使用它时,我收到一个错误:SyntaxError:EOL扫描字符串文字时。我试着从最后的斜线中取出。但是,虽然错误似乎已经消失,但正则表达式找不到该模式。我有一个嵌入了以下模式的字符串:

output = "... 57867983 - 87995423 ...."

我正在使用以下代码:

include re

regex = re.compile(r"\d{8}\-\d{8}\")

re.search(regex, outuput)

regexp不会返回输出字符串中的模式。有人能告诉我我做错了什么吗?谢谢!

这是我想要匹配的实际字符串,因为它出现在返回的字符串中:

Hash\r\n\t\t01773857 - 90349912\r\n\tWork with

我需要在8位数加上我想要匹配的连字符之前考虑任何字母数字字符吗?

3 个答案:

答案 0 :(得分:2)

您的最后一次"已被\

转义

你想:

regex = re.compile(r"\d{8}\-\d{8}")

编辑 - 根据您更新的问题,您需要在短划线之前考虑空格:

regex = re.compile(r"\d{8}\s*\-\s*\d{8}")

答案 1 :(得分:2)

您的数据与您的模式不符:

57867983 - 87995423 

是8位,后跟空格,后跟连字符,后跟空格,后跟8位数。

所以你的模式应该是:

r"\d{8} - \d{8}"

如果空格是可选的,那么:

r"\d{8} *- *\d{8}"

表示“零个或多个空格”。顺便说一下,连字符不是[ ]之外的特殊字符,因此不需要转义。

编辑: 这是一个更完整的例子:

import re

regex = re.compile(r"(\d{8}) - (\d{8})")

outuput = "Hash\r\n\t\t01773857 - 90349912\r\n\tWork with"

m = re.search(regex, outuput)

if m: print("Found:",m.groups())

给出:

Found: ('01773857', '90349912')

答案 2 :(得分:1)

import re
regex = re.compile(r'(\d{8}\s*\-\s*\d{8})')
found = re.search(regex, "11111111-01234567")
print found.group(0)
found = re.search(regex, "22222222 - 01234567")
print found.group(0)