我正在使用正则表达式来查找由连字符分隔的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位数加上我想要匹配的连字符之前考虑任何字母数字字符吗?
答案 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)